位运算
- 异或运算
答案是使用位运算。对于这道题,可使用异或运算 ⊕。异或运算有以下三个性质。
任何数和 0 做异或运算,结果是本身,即a⊕0=a。
任何数和其自身做异或运算,结果是 0,即 a⊕a=0。
异或运算满足交换律和结合律,即
a ⊕ b⊕ a=b ⊕ a ⊕ a=b ⊕ (a ⊕ a)=b ⊕ 0=b
例1
class Solution {
public int singleNumber(int[] nums) {
int single = 0;
for (int num : nums) {
single ^= num;
}
return single;
}
}
2. 136. 只出现一次的数字
public int hammingDistance(int x, int y) {
return Integer.bitCount(x ^ y);
}
数组
1. 剑指 Offer 40. 最小的k个数
class Solution {
public int[] getLeastNumbers(int[] arr, int k) {
int[] vec = new int[k];
Arrays.sort(arr);
for (int i = 0; i < k; ++i) {
vec[i] = arr[i];
}
return vec;
}
}