🗒️1318. 或运算的最小翻转次数
2025-1-27
| 2025-1-27
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
创建时间
Jan 27, 2025 03:20 PM
给你三个正整数 ab 和 c
你可以对 a 和 b 的二进制表示进行位翻转操作,返回能够使按位或运算   a OR b == c  成立的最小翻转次数。
「位翻转操作」是指将一个数的二进制表示任何单个位上的 1 变成 0 或者 0 变成 1 。

位运算——与或(AND/OR)

遍历

直接按照题意判断每一位的的情况。

根据运算性质

  • c == 0
    • a == 0, b == 0:不用操作
    • a == 1 或者 b == 1(两者不同时为 1):只操作一次
    • a == 1,b == 1:需要操作两次
  • c == 1
    • a == 0, b == 0:操作一次
    • a 和 b 至少有一个为 1:不用操作
(a | b) ^ c 表示 (a | b)c 可以根据最后的 1 得到有多少不同的位数。但是有一个例外 a == 1,b == 1, c == 0 时,需要增加一次额外的次数,我们进行特判。

📎 参考

  • 【题单】位运算
  • 2419. 按位与最大的最长子数组2980. 检查按位或是否存在尾随零
    Loading...