source: https://leetcode.com/problems/single-number-ii/description/
Table of Contents
Single Number II
Description
Given an integer array nums where every element appears three times except for one, which appears exactly once. Find the single element and return it.
You must implement a solution with a linear runtime complexity and use only constant extra space.
Example 1:
Input: nums = [2,2,3,2]
Output: 3
Example 2:
Input: nums = [0,1,0,1,0,1,99]
Output: 99
Constraints:
- 1 <= nums.length <= 3 * 104
- -231 <= nums[i] <= 231 – 1
- Each element in nums appears exactly three times except for one element which appears once.
Solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
class Solution { public int singleNumber(int[] nums) { //compare 1st bit of all the numbers //compare 2nd bit of all the numbers //... //compare 32nd bit of all the numbers int ans = 0; for(int bit=0;bit<32;bit++){ int sum = 0; for(int i=0;i<nums.length;i++){ if((nums[i]>>bit & 1) == 1){ sum++; sum= sum%3; } } //left shift 1 by the same amount as bit int res = 1 << bit; if(sum!=0){ ans = ans | res; } } return ans; } } |