Re: [閒聊] 每日leetcode已回收
睡覺前騙一點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))
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.72.110.124 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1711036767.A.3BD.html
→
03/22 00:00,
1年前
, 1F
03/22 00:00, 1F
→
03/22 00:16,
1年前
, 2F
03/22 00:16, 2F
討論串 (同標題文章)
完整討論串 (本文為第 68 之 1548 篇):