1318. Minimum Flips to Make a OR b Equal to c

1. Description

Given 3 positives numbers a, b and c. Return the minimum flips required in some bits of a and b to make ( a OR b == c ). (bitwise OR operation).
Flip operation consists of change any single bit 1 to 0 or change the bit 0 to 1 in their binary representation.

2. Example

Example 1

Example 1
Input: a = 2, b = 6, c = 5
Output: 3
Explanation: After flips a = 1 , b = 4 , c = 5 such that (a OR b == c)

Example 2

Input: a = 4, b = 2, c = 7
Output: 1

Example 3

Input: a = 1, b = 2, c = 3
Output: 0

3. Constraints

  • 1 <= a <= $10^9$
  • 1 <= b <= $10^9$
  • 1 <= c <= $10^9$

4. Solutions

Bit Manipulation

Time complexity: O(1)
Space complexity: O(1)

class Solution {
public:
    int minFlips(int a, int b, int c) {
        int flip_count = 0;
        for (int i = 0; i < 31; ++i) {
            int bit_a = (a >> i) & 1;
            int bit_b = (b >> i) & 1;
            int bit_c = (c >> i) & 1;

            if (bit_c == 0) {
                flip_count += bit_a + bit_b;
            } else {
                flip_count += (bit_a + bit_b) == 0;
            }
        }

        return flip_count;
    }
};
comments powered by Disqus