Re: [闲聊] 每日leetcode

楼主: JIWP (JIWP)   2024-03-21 23:59:25
睡觉前骗一点P币,想起来我档案还没打 干
137. Single Number I
有一个array nums,里面所有数字都出现3次,只有1个数字出现过1次
请问出现过1次的数字是哪个?
思路
出现3次就没办法用XOR了
因为题目的constrain有提到所有数字介于-2^31~2^31-1
要以bit为单位去记录每个数字1-32bit的状态
如果该数字的第n个bit是1就+1,将最后的总合%3,结果就是答案第n个bit的状态
然后我code最后要先把答案转成int32再转回int
是因为在golang中int是64位元,如果不这样做负数的sign extension会让结果出错
golang code
func singleNumber(nums []int) int {
sum:=0
ans:=0
for i:=0;i<32;i++{
sum=0
for _,val:=range nums{
if val&(1<<i)!=0{
sum++
}
}
if sum%3!=0{
ans|=(1<<i)
}
}
return int(int32(ans))
}
作者: RinNoKareshi (立石凛的男友)   2024-03-22 00:00:00
大师
作者: ZooseWu (N5)   2024-03-22 00:16:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com