汉明距离

力扣

题目描述

两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。

给出两个整数 xy,计算它们之间的汉明距离。

注意:
0 ≤ x, y < 231.

1
2
3
4
5
6
7
8
9
10
11
12
示例:

输入: x = 1, y = 4

输出: 2

解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑

上面的箭头指出了对应二进制位不同的位置。

题目解答

异或运算后统计1的个数

1
2
3
4
5
6
7
8
9
class Solution {

public int hammingDistance(int x, int y) {

return Integer.bitCount(x ^ y);

}

}

只出现一次的数字

力扣

题目描述

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

1
2
输入: [2,2,1]
输出: 1

示例 2:

1
2
输入: [4,1,2,1,2]
输出: 4

题目解答

利用异或特性,相同的数异或为0,0和任何数异或为其本身。

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

缺失数字

力扣

题目描述

给定一个包含 0, 1, 2, ..., nn 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。

示例 1:

1
2
输入: [3,0,1]
输出: 2

示例 2:

1
2
输入: [9,6,4,2,3,5,7,0,1]
输出: 8

题目解答

利用异或

1
2
3
4
5
6
7
8
9
class Solution {
public int missingNumber(int[] nums) {
int rlt = 0;
for(int i = 0;i < nums.length;i++)
rlt = rlt ^ i ^ nums[i];
rlt = rlt ^ nums.length;
return rlt;
}
}

只出现一次的数字Ⅱ

力扣

题目描述

给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。

示例 :

1
2
输入: [1,2,1,3,2,5]
输出: [3,5]

注意:

  1. 结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
  2. 你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?