LeetCode、1318. 或运算的最小翻转次数【中等,位运算】

文章目录

  • 前言
  • LeetCode、1318. 或运算的最小翻转次数【中等,位运算】
    • 题目链接与分类
    • 题解
      • 位运算
  • 资料获取

前言

博主介绍:✌目前全网粉丝2W+,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。

涵盖技术内容:Java后端、算法、分布式微服务、中间件、前端、运维、ROS等。

博主所有博客文件目录索引:博客目录索引(持续更新)

视频平台:b站-Coder长路


LeetCode、1318. 或运算的最小翻转次数【中等,位运算】

题目链接与分类

题目链接:LeetCode、1318. 或运算的最小翻转次数

分类:基础算法/位运算


题解

位运算

思路:对于10的9次方使用二进制来表示,只需要30个数字,那么我们对其二进制进行遍历,那实际只需要30次运算即可。

注意我们这是要找到对a、b进行翻转从而得到C,可见如下:

LeetCode、1318. 或运算的最小翻转次数【中等,位运算】_第1张图片

对于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;
    }
}

LeetCode、1318. 或运算的最小翻转次数【中等,位运算】_第2张图片


资料获取

大家点赞、收藏、关注、评论啦~

精彩专栏推荐订阅:在下方专栏

  • 长路-文章目录汇总(算法、后端Java、前端、运维技术导航):博主所有博客导航索引汇总
  • 开源项目Studio-Vue—校园工作室管理系统(含前后台,SpringBoot+Vue):博主个人独立项目,包含详细部署上线视频,已开源
  • 学习与生活-专栏:可以了解博主的学习历程
  • 算法专栏:算法收录

更多博客与资料可查看获取联系方式,文末获取开发资源及更多资源博客获取

你可能感兴趣的:(算法刷题,#,LeetCode,leetcode,算法,职场和发展)