文章目录
- 前言
- LeetCode、1318. 或运算的最小翻转次数【中等,位运算】
- 题目链接与分类
- 题解
- 位运算
- 资料获取
前言
博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。
涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。
博主所有博客文件目录索引:博客目录索引(持续更新)
视频平台:b站-Coder长路
LeetCode、1318. 或运算的最小翻转次数【中等,位运算】
题目链接与分类
题目链接: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;
}
}
资料获取
大家点赞、收藏、关注、评论啦~
精彩专栏推荐订阅:在下方专栏👇🏻
- 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
- 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
- 学习与生活-专栏:可以了解博主的学习历程
- 算法专栏:算法收录
更多博客与资料可查看👇🏻获取联系方式👇🏻,🍅文末获取开发资源及更多资源博客获取🍅