首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang Leetcode 260. Single Number III.go

Golang Leetcode 260. Single Number III.go

作者头像
anakinsun
发布2019-05-10 18:28:12
3670
发布2019-05-10 18:28:12
举报
文章被收录于专栏:学习日记学习日记

版权声明:原创勿转

https://cloud.tencent.com/developer/article/1423916

思路

如果能将A,B分开到二个数组中,那显然符合“异或”解法的关键点了。因此这个题目的关键点就是将A,B分开到二个数组中。由于A,B肯定是不相等的,因此在二进制上必定有一位是不同的。根据这一位是0还是1可以将A,B分开到A组和B组。而这个数组中其它数字要么就属于A组,要么就属于B组。再对A组和B组分别执行“异或”解法就可以得到A,B了。而要判断A,B在哪一位上不相同,只要根据A异或B的结果就可以知道了,这个结果在二进制上为1的位就说明A,B在这一位上是不相同的。

code

func singleNumber(nums []int) []int {
	res := make([]int, 2)
	xor := nums[0]
	for i := 1; i < len(nums); i++ {
		xor ^= nums[i]
	}
	bit := xor &^ (xor - 1)
	n1, n2 := 0, 0
	for _, v := range nums {
		if v&bit > 0 {
			n1 ^= v
		} else {
			n2 ^= v
		}
	}
	res[0] = n1
	res[1] = n2
	return res
}

更多内容请移步我的repo:https://github.com/anakin/golang-leetcode

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年04月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路
  • code
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档