位运算

  1. 异或运算

答案是使用位运算。对于这道题,可使用异或运算 ⊕。异或运算有以下三个性质。

任何数和 0 做异或运算,结果是本身,即a⊕0=a。
任何数和其自身做异或运算,结果是 0,即 a⊕a=0。
异或运算满足交换律和结合律,即
a ⊕ b⊕ a=b ⊕ a ⊕ a=b ⊕ (a ⊕ a)=b ⊕ 0=b

例1

  1. class Solution {
  2. public int singleNumber(int[] nums) {
  3. int single = 0;
  4. for (int num : nums) {
  5. single ^= num;
  6. }
  7. return single;
  8. }
  9. }

链接:https://leetcode-cn.com/problems/single-number/solution/zhi-chu-xian-yi-ci-de-shu-zi-by-leetcode-solution/

2. 136. 只出现一次的数字

  1. public int hammingDistance(int x, int y) {
  2. return Integer.bitCount(x ^ y);
  3. }

数组

1. 剑指 Offer 40. 最小的k个数

  1. class Solution {
  2. public int[] getLeastNumbers(int[] arr, int k) {
  3. int[] vec = new int[k];
  4. Arrays.sort(arr);
  5. for (int i = 0; i < k; ++i) {
  6. vec[i] = arr[i];
  7. }
  8. return vec;
  9. }
  10. }