Skip to content

Commit 6cb928d

Browse files
committed
位操作: 只出现一次(2)
Change-Id: I6ee940b07951380a3bb41dbe5d5f990482f869b6
1 parent c9ea3fb commit 6cb928d

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* @lc app=leetcode.cn id=260 lang=golang
3+
*
4+
* [260] 只出现一次的数字 III
5+
*
6+
* https://leetcode-cn.com/problems/single-number-iii/description/
7+
*
8+
* algorithms
9+
* Medium (67.85%)
10+
* Likes: 141
11+
* Dislikes: 0
12+
* Total Accepted: 10.9K
13+
* Total Submissions: 16.1K
14+
* Testcase Example: '[1,2,1,3,2,5]'
15+
*
16+
* 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
17+
*
18+
* 示例 :
19+
*
20+
* 输入: [1,2,1,3,2,5]
21+
* 输出: [3,5]
22+
*
23+
* 注意:
24+
*
25+
*
26+
* 结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
27+
* 你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
28+
*
29+
*
30+
*/
31+
32+
// @lc code=start
33+
func singleNumber(nums []int) []int {
34+
diff := nums[0]
35+
for i := 1; i < len(nums); i++ {
36+
diff ^= nums[i]
37+
}
38+
diff &= -diff // 保留从右往左第一个1,其他位设为0
39+
ret := make([]int, 2)
40+
for _, num := range nums {
41+
if num & diff == 0 {
42+
ret[0] ^= num
43+
} else {
44+
ret[1] ^= num
45+
}
46+
}
47+
return ret
48+
}
49+
// @lc code=end
50+

0 commit comments

Comments
 (0)