當(dāng)前位置:
首頁(yè) >
java二维数组数字数显次数_【每日一题】118.数组中数字出现的次数
發(fā)布時(shí)間:2023/12/10
52
豆豆
生活随笔
收集整理的這篇文章主要介紹了
java二维数组数字数显次数_【每日一题】118.数组中数字出现的次数
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
關(guān)注我們獲取更多計(jì)算機(jī)考研信息
????public?int?singleNumber(int[]?nums)?{//本算法同樣適用于數(shù)組nums中存在負(fù)數(shù)的情況
????????if(nums.length==0)?return?-1;//輸入數(shù)組長(zhǎng)度不符合要求,返回-1;
????????int[]?bitSum?=?new?int[32];//java?int類(lèi)型有32位,其中首位為符號(hào)位
????????int?res=0;
????????for(int?num:nums){
????????????int?bitMask=1;//需要在這里初始化,不能和res一起初始化
????????????for(int?i=31;i>=0;i--){//bitSum[0]為符號(hào)位
????????????????//這里同樣可以通過(guò)num的無(wú)符號(hào)右移>>>來(lái)實(shí)現(xiàn),否則帶符號(hào)右移(>>)左側(cè)會(huì)補(bǔ)符號(hào)位,對(duì)于負(fù)數(shù)會(huì)出錯(cuò)。
????????????????//但是不推薦這樣做,最好不要修改原數(shù)組nums的數(shù)據(jù)
????????????????if((num&bitMask)!=0)?bitSum[i]++;//這里判斷條件也可以寫(xiě)為(num&bitMask)==bitMask,而不是==1
????????????????bitMask=bitMask<<1;//左移沒(méi)有無(wú)符號(hào)、帶符號(hào)的區(qū)別,都是在右側(cè)補(bǔ)0
????????????}
????????}
????????for(int?i=0;i<32;i++){//這種做法使得本算法同樣適用于負(fù)數(shù)的情況
????????????res=res<<1;
????????????res+=bitSum[i]%3;//這兩步順序不能變,否則最后一步會(huì)多左移一次
????????}
????????return?res;
????}
}
? 今日習(xí)題
在一個(gè)數(shù)組 nums 中除一個(gè)數(shù)字只出現(xiàn)一次之外,其他數(shù)字都出現(xiàn)了三次。請(qǐng)找出那個(gè)只出現(xiàn)一次的數(shù)字。
示例 1:
輸入:nums = [3,4,3,3]
輸出:4
示例 2:
輸入:nums = [9,1,7,9,7,9,7]
輸出:1
限制:
1 <= nums.length <= 10000
1 <= nums[i] < 2^31
……? 思考時(shí)間……
如果你想好答案了
請(qǐng)查看解題思路和代碼實(shí)現(xiàn)
▼
我們需要一個(gè)長(zhǎng)度為32的輔助數(shù)組存儲(chǔ)二進(jìn)制表示的每一位的和。由于數(shù)組的長(zhǎng)度是固定的,因此空間效率是O(1)。
·代碼實(shí)現(xiàn)·
public?class?Solution56_2?{????public?int?singleNumber(int[]?nums)?{//本算法同樣適用于數(shù)組nums中存在負(fù)數(shù)的情況
????????if(nums.length==0)?return?-1;//輸入數(shù)組長(zhǎng)度不符合要求,返回-1;
????????int[]?bitSum?=?new?int[32];//java?int類(lèi)型有32位,其中首位為符號(hào)位
????????int?res=0;
????????for(int?num:nums){
????????????int?bitMask=1;//需要在這里初始化,不能和res一起初始化
????????????for(int?i=31;i>=0;i--){//bitSum[0]為符號(hào)位
????????????????//這里同樣可以通過(guò)num的無(wú)符號(hào)右移>>>來(lái)實(shí)現(xiàn),否則帶符號(hào)右移(>>)左側(cè)會(huì)補(bǔ)符號(hào)位,對(duì)于負(fù)數(shù)會(huì)出錯(cuò)。
????????????????//但是不推薦這樣做,最好不要修改原數(shù)組nums的數(shù)據(jù)
????????????????if((num&bitMask)!=0)?bitSum[i]++;//這里判斷條件也可以寫(xiě)為(num&bitMask)==bitMask,而不是==1
????????????????bitMask=bitMask<<1;//左移沒(méi)有無(wú)符號(hào)、帶符號(hào)的區(qū)別,都是在右側(cè)補(bǔ)0
????????????}
????????}
????????for(int?i=0;i<32;i++){//這種做法使得本算法同樣適用于負(fù)數(shù)的情況
????????????res=res<<1;
????????????res+=bitSum[i]%3;//這兩步順序不能變,否則最后一步會(huì)多左移一次
????????}
????????return?res;
????}
}
微信關(guān)注“字節(jié)408考研”,
免費(fèi)獲取各院校計(jì)算機(jī)軟件考研信息與專(zhuān)業(yè)課資料!
總結(jié)
以上是生活随笔為你收集整理的java二维数组数字数显次数_【每日一题】118.数组中数字出现的次数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 比亚迪最强SUV!全新唐DM-p价格曝光
- 下一篇: wifi 小米pro 驱动 黑苹果_搞定