Вопрос:
Ссылка: 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)
Заключение:
Надеюсь, что решение окажется полезным и вам, ребята, понравилось. Давайте обсудим новые подходы. Пожалуйста, прокомментируйте, если у вас есть предложения и сомнения, которые необходимо развеять.
Удачного кодирования.