【Leetcode】:Single Number II问题 in Go语言
2016-04-13 18:09
513 查看
Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
这道题比同类的另外两个问题解决起来都要复杂,其核心思路就是“计满三个就清零”,for循环每次处理一个nums中的数,对这个数的
每一个特比进行计算,只要1出现3次便重置为0,那么nums数组中的所有出现3次的数的相应bit位一定为0
参考“http://www.tuicool.com/articles/fAZZv2a”
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
这道题比同类的另外两个问题解决起来都要复杂,其核心思路就是“计满三个就清零”,for循环每次处理一个nums中的数,对这个数的
每一个特比进行计算,只要1出现3次便重置为0,那么nums数组中的所有出现3次的数的相应bit位一定为0
参考“http://www.tuicool.com/articles/fAZZv2a”
func singleNumber(nums []int) int { one := 0 two := 0 three := 0 for _, v := range nums { two = two | (one & v) //计算每个比特位中的1是否出现了两次 one = one ^ v //计算每个比特位是否出现了一次或三次 three = one & two //当one和two的相应位为1时,表示相应位出现了3次 one = one & (^three) //当相应位出现了3次时,把相应的位出现次数置为0 two = two & (^three) } return one }
相关文章推荐
- Go 语言 Channel 实现原理精要
- Go语言将支持Android
- Golang实现的聊天程序服务端和客户端代码分享
- Go语言入门教程之Arrays、Slices、Maps、Range操作简明总结
- GO语言异常处理机制panic和recover分析
- go语言执行windows下命令行的方法
- Go语言计算两个经度和纬度之间距离的方法
- Go语言排序与接口实例分析
- Go语言导出内容到Excel的方法
- go语言实现sqrt的方法
- Go语言MessageBox用法实例
- Go语言判断指定文件是否存在的方法
- go语言制作的zip压缩程序
- go语言channel实现多核并行化运行的方法
- Go语言MD5加密用法实例
- go语言使用scp的方法实例分析
- Go语言中的switch用法实例分析
- Golang学习笔记(三):控制流
- go语言检测文件是否存在的方法
- Go语言里的结构体文法实例分析