做室内设计的网站有哪些,淘宝客网站推广工具,怎么免费弄网站,东莞企业宣传片制作公司第一题 本题我们可以使用以下方法#xff1a; 方法一#xff1a; 使用hash表元素#xff0c;出现次数来统计字符串中不同元素分别出现的次数#xff0c;当某一个元素的次数大于1时#xff0c;返回false#xff0c;如果每个元素的出现次数都为1#xff0c;则返回…第一题 本题我们可以使用以下方法 方法一 使用hash表元素出现次数来统计字符串中不同元素分别出现的次数当某一个元素的次数大于1时返回false如果每个元素的出现次数都为1则返回true 方法二 对于hash表我们首先可以优化为int【】数组最后我们可以继续优化为位图 我们采用位图的思想和以下列操作来解决上述问题 首先定义个位图变量同时在32个位上从右往左一次定义位置为0到31并从右到左一次存放ab。。。。。。等字符最后进行位操作 当我们在元素的相应定义位置进行与1操作如果结果得到1则已经存放过该元素了直接返回false反之得到的结果为0则代表右新的元素出现时位图的相应定义位置进行或1操作并继续进行循环操作直到循环结束 综上所述代码如下 class Solution {public boolean isUnique(String str) {if(str.length() 26){return false;}int bitMap 0;for(int i 0;istr.length();i){int x str.charAt(i) - a;if(((bitMap x ) 1) 1){return false;}else{bitMap bitMap | (1 x);}}return true;}
} 第二题 本题采用位运算的方法来解决 解题思路让我们新定义的数组中的每一个数字和原始数组中的每一个数进行异或最终的得到的数就是原始数组中缺少的那个数字 举例如下 代码如下所示 class Solution {public int missingNumber(int[] nums) {int ret 0;for(int x : nums) {ret ^ x; }for(int i 0;inums.length;i){ret ^ i;}return ret;}
} 第三题 解题过程如下图所示 步骤一 由于异或可以理解为无进位相加可算出没有进位的两数相加 步骤二 由上图所示两个数进行与操作就可以得到需要进位的数字只不过这个与的值需要左移一位 举个例子详细过程如下所示 需要重复进行两个数的异或操作和取得进位数操作直到需要加的进位数为0此时就停止循环代码如下所示 class Solution {public int getSum(int a, int b) {while(b ! 0){int x a ^ b;int y (a b) 1;a x;b y; }return a;}
} 第四题 将原数组中的每一个元素进行位图存放然后计算多个元素的同一个位置上的数字之和将这些和余3如下图所示 最终每一个位置上存放被余到的数字最终这些个数组成我们要求的出现一个的数 代码如下所示 class Solution {public int singleNumber(int[] nums) {int ret 0;for(int i 0;i32;i){int sum 0;for(int x : nums){if(((x i) 1) 1){sum;}sum % 3;}if(sum 1){ret ret | (1 i);}}return ret;}
}
ps本次的内容就到这里了如果大家感兴趣的话就请一键三连哦