Вопрос:

Ссылка: https://leetcode.com/problems/minimum-flips-to-make-a-or-b-equal-to-c/

Даны 3 положительных числа a, b и c. Возвращает минимальные перевороты, необходимые для некоторых битов a и b ( a ИЛИ b == c ). (операция побитового ИЛИ).
Операция инвертирования состоит из замены любого одиночного бита 1 на 0 или замены бита 0 на 1 в их двоичном представлении.

Пример 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)

Пример 2:

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

Пример 3:

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

Ограничения:

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

Решение:

class Solution {
public:
    int minFlips(int a, int b, int c) {
        if((a|b) == c){
            return 0;
        }
        int ans = 0;
        while(a!=0 | b!=0 | c!=0){
            if((c&1) == 1){
                if((a&1) == 0 && (b&1) == 0){
                    ans++;
                }
            }else{
                ans += (a&1)+(b&1);
            }
            a >>= 1;
            b >>= 1;
            c >>= 1;
        }
        return ans;
    }
};

Временная сложность: O(N)

Космическая сложность: O(1)

Заключение:

Надеюсь, что решение окажется полезным и вам, ребята, понравилось. Давайте обсудим новые подходы. Пожалуйста, прокомментируйте, если у вас есть предложения и сомнения, которые необходимо развеять.

Удачного кодирования.