您好,登錄后才能下訂單哦!
題目描述:給一個數組,有一個數出現了兩次或者1次,而其他數都出現了三次,找出這個數。其實對應了leetcode 137。
網上的解法多是位運算
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; }
利用位運算,求每位1出現的次數,出現3次的最后加起來%3==0. !=0的要么是1次,要么是2次。分情況討論就行。最后的| 或運算,很強哦。。。
有道給的是一個數出現了一次,其他數都出現了三次,找出這一個數,對應LeetCode137題!位運算
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; } }
當時寫的時候出現了一點小小的問題,就是最后 | 的時候,忘記左移回來了。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。