题目描述
https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof/
解
// 数组中出现的次数
func singleNumbers(nums []int) []int {
if len(nums) < 2 {
return []int{}
}
var c, k int
for _, v := range nums {
c ^= v
}
// 找到第一个1位
var i = 1
for i&c == 0 {
i = i << 1
}
c = 0
for _, v := range nums {
if i&v == 0 {
c ^= v
continue
}
k ^= v
}
return []int{c, k}
}
思路
因为是查找只出现一次的两个数,必须知道的是两个进行异或后是等于0的;首先对全量进行异或,得出两个单独出现的数的异或,然后依照的这个数的任意一位,对全量数据进行分类,为什么要对上面数的任意以为,为了保证能把这两个单独出现的数分在不同数组里;这样再对每个数进行异或就OK了!
网友评论