2917. Find the K-or of an Array

T: O(n*32) , 32 is 32 bits
S: O(32) 
```java
class Solution {
    public int findKOr(int[] nums, int k) { 
        int[] bitCount = new int[32];
        for (int num : nums) {
            int idx = 0; // accumulate for each num's bits count
            while (num > 0) {
                if ((num & 1) == 1) { // (1 is ...00000001)
                    bitCount[idx]++;
                }
                idx++;
                num = num >> 1; // check each bits in num, if it's 1, bitCount[idx]++
            }
        }
        int result = 0;
        for (int i = 0 ; i < 31; i++) {
            if (bitCount[i] >= k) { 
                result += (1 << i); // at last add pow(2, i) to result (if it's count >= k)
            }
        }
        return result;
    }
}

/**
using right shift 

& 1 -> is means AND onlylowest bit 1
(1 is ...00000001)

for each num
   each num bits
      AND 1 -> if it's 1 -> bitCount[i]++
      do num right shift at last -> num will become 0

left shift
 

T: O(n*32) , 32 is 32 bits
S: O(32) 
*/
```

better one

Last updated

Was this helpful?