2021-10-10 Daily-Challenge

Today I have done leetcode's October LeetCoding Challenge with cpp.

October LeetCoding Challenge 10

Description

Bitwise AND of Numbers Range

Given two integers left and right that represent the range [left, right], return the bitwise AND of all numbers in this range, inclusive.

Example 1:

Input: left = 5, right = 7
Output: 4

Example 2:

Input: left = 0, right = 0
Output: 0

Example 3:

Input: left = 1, right = 2147483647
Output: 0

Constraints:

  • 0 <= left <= right <= 231 - 1

Solution

constexpr int highbit(int x) {
  x |= x >> 16;
  x |= x >> 8;
  x |= x >> 4;
  x |= x >> 2;
  x |= x >> 1;
  x ^= x >> 1;
  return x;
}
class Solution {
public:
  int rangeBitwiseAnd(int left, int right) {
    if(left == right) return left;
    int result = left & right;
    int answer = 0;
    int bit = highbit(right);
    while(bit) {
      if(bit & result) {
        answer |= bit;
      } else if((bit & left) || (bit & right)) {
        break;
      }
      bit >>= 1;
    }
    return answer;
  }
};

// Accepted
// 8268/8268 cases passed (0 ms)
// Your runtime beats 100 % of cpp submissions
// Your memory usage beats 77.49 % of cpp submissions (5.9 MB)