溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

leetcode 137 && 360一面算法 &&有道一面

發(fā)布時(shí)間:2020-04-21 01:07:46 來源:網(wǎng)絡(luò) 閱讀:682 作者:努力的C 欄目:建站服務(wù)器

題目描述:給一個(gè)數(shù)組,有一個(gè)數(shù)出現(xiàn)了兩次或者1次,而其他數(shù)都出現(xiàn)了三次,找出這個(gè)數(shù)。其實(shí)對(duì)應(yīng)了leetcode 137。


網(wǎng)上的解法多是位運(yùn)算

public int singleNumber(int[] nums) {    
int ans = 0;   
 for(int i = 0; i < 32; i++) {      
  int sum = 0;        
  for(int j = 0; j < nums.length; j++) {         
    if(((nums[j] >> i) & 1) == 1) {
                sum++;
                sum %= 3;
            }
        }      
          if(sum == 1) {
            ans |= sum << i;
        }        
        if(sum == 2) {
            ans |= sum/2 << i
        }
    }    return ans;
}

利用位運(yùn)算,求每位1出現(xiàn)的次數(shù),出現(xiàn)3次的最后加起來%3==0. !=0的要么是1次,要么是2次。分情況討論就行。最后的| 或運(yùn)算,很強(qiáng)哦。。。




有道給的是一個(gè)數(shù)出現(xiàn)了一次,其他數(shù)都出現(xiàn)了三次,找出這一個(gè)數(shù),對(duì)應(yīng)LeetCode137題!位運(yùn)算

class Solution {
    public int singleNumber(int[] nums) {
       int length = nums.length;  
        int result = 0;  
        for(int i = 0; i<32; i++){  
            //int count = 0;   
            int temp = 0;  
            for(int j=0; j<length; j++){  
                temp+=(nums[j]>>i & 1);
                    //count++;  
            }  
          //if(count %3==1)  
                result |= (temp%3)<<i;  
        }  
        return result; 
    }
}

當(dāng)時(shí)寫的時(shí)候出現(xiàn)了一點(diǎn)小小的問題,就是最后 | 的時(shí)候,忘記左移回來了。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI