网站与服务器的关系,网站的推广费用票可以做抵扣吗,个人网站制作成品,商业网站源码目录 1. 判断字符是否唯一2. 消失的数字3. 两整数之和4. 只出现一次的数字II5. 消失的两个数字 前情提要#xff1a;如果对一些常见的二进制位运算不熟悉#xff0c;请看这篇文章#xff1a; 常见的位运算
1. 判断字符是否唯一
面试题 01.01. 判定字符是否唯一 - 力扣如果对一些常见的二进制位运算不熟悉请看这篇文章 常见的位运算
1. 判断字符是否唯一
面试题 01.01. 判定字符是否唯一 - 力扣LeetCode 思路利用位图的思想定义一个整数来模拟哈希表根据每个比特位对应的值来映射字符 代码实现
class Solution {public boolean isUnique(String astr) { int BitMap 0;int n astr.length();if(n 26){return false;}for(int i0;in;i) {char ch astr.charAt(i);if(((BitMap(ch-a)) 1)1){return false;} else {BitMap | (1(ch-a));}}return true;}
}2. 消失的数字
268. 丢失的数字 - 力扣LeetCode 思路 代码实现
class Solution {public int missingNumber(int[] nums) {// 异或运算int n nums.length;int ret 0;for(int i0;in;i){ret^i;}for (int i 0; i n; i) {ret ^ nums[i];}return ret;// int n nums.length;// //高斯求和// int sum ((n)*(n1))/2;// int numsSum 0;// for(int i0;inums.length;i) {// numsSum nums[i];// }// return sum - numsSum;}
}3. 两整数之和
371. 两整数之和 - 力扣LeetCode 思路
1、让这两个数a、b无进位相加异或所得结果x
2、a和b按位与所得结果carry
3、axbcarry
4、a和b无进位相加疑惑
循环上面步骤直到b为0此时相加结果是a
class Solution {public int getSum(int a, int b) {while(b!0){int x a^b;//先计算无进位相加int carry (a b)1;a x;b carry;}return a;}
}4. 只出现一次的数字II
137. 只出现一次的数字 II - 力扣LeetCode 思路 定义一个变量ret依次计算nums数组中第i位的和sum接着让sum%3根据结果对应的值修改ret对应比特位的值
class Solution {public int singleNumber(int[] nums) {int ret 0;for(int i0;i32;i){//依次修改ret中的每一位int sum 0;for(int j0;jnums.length;j){sum ((nums[j]i)1);//计算第i位的和}sum%3;if(sum1){//修改第i位置的值ret | (1i);}}return ret;}
}5. 消失的两个数字
面试题 17.19. 消失的两个数字 - 力扣LeetCode 思路 class Solution {public int[] missingTwo(int[] nums) {int len nums.length;int N len 2;int ret 0;for (int i 0; i nums.length; i) {ret ^ nums[i];}for (int i 1; i N; i) {ret ^ i;}// ret为消失的两个数^的结果int lowBit ret (-ret);int[] ans new int[2];ans[0] 0;ans[1] 0;for (int i 1; i N; i) {if ((i lowBit) ! 0) {ans[0] ^ i;} else {ans[1] ^ i;}}for (int i 0; i nums.length; i) {if ((nums[i] lowBit) ! 0) {ans[0] ^ nums[i];} else {ans[1] ^ nums[i];}}return ans;}
}