博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。
涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。
博主所有博客文件目录索引:博客目录索引(持续更新)
视频平台:b站-Coder长路
题目链接:LeetCode、1318. 或运算的最小翻转次数
分类:基础算法/位运算
思路:对于10的9次方使用二进制来表示,只需要30个数字,那么我们对其二进制进行遍历,那实际只需要30次运算即可。
注意我们这是要找到对a、b进行翻转从而得到C,可见如下:
对于c为0的时候,可以发现翻转的次数几乎就是a、b相加;c为1的时候,只要当a、b为0时
复杂度分析:时间复杂度O(n);空间复杂度O(1)
class Solution {
//2的30次方 为1,073,741,824 刚好凑足10的9次方
public int minFlips(int a, int b, int c) {
int res = 0;
for (int i = 0; i <= 29; i ++) {
int cnt_a = (a >> i) & 1;
int cnt_b = (b >> i) & 1;
int cnt_c = (c >> i) & 1;
if (cnt_c == 0) {
res += cnt_a + cnt_b;
}else {
res += cnt_a + cnt_b == 0 ? 1 : 0;
}
}
return res;
}
}
大家点赞、收藏、关注、评论啦~
精彩专栏推荐订阅:在下方专栏
更多博客与资料可查看获取联系方式,文末获取开发资源及更多资源博客获取