-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQ136_SingleNumber.java
More file actions
52 lines (47 loc) · 1.28 KB
/
Q136_SingleNumber.java
File metadata and controls
52 lines (47 loc) · 1.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.so.leetcode;
import java.util.HashSet;
import java.util.Set;
/**
* 136. 只出现一次的数字
* 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
*/
public class Q136_SingleNumber {
/**
* 异或解法
* 1.
* 任何数与 0 异或等于它本身:a ^ 0 = a
* 2.
* 任何数与自身异或等于 0:a ^ a = 0
* 3.
* 异或满足交换律和结合律:a ^ b ^ a = (a ^ a) ^ b = 0 ^ b = b
* @param nums
* @return
*/
public int singleNumber(int[] nums) {
int result = 0;
for (int num : nums) {
result ^= num; // 对所有数字进行异或操作
}
return result;
}
/**
* 暴力解法
* @param nums
* @return
*/
public int singleNumber2(int[] nums) {
Set<Integer> temp = new HashSet<>();
for (int num : nums) {
if (temp.contains(num)) {
temp.remove(num);
} else {
temp.add(num);
}
}
if (temp.size() > 0) {
Integer[] integers = temp.toArray(new Integer[0]);
return integers[0];
}
return -1;
}
}