翻转数位题目解释和代码

这段代码的功能是计算一个32位整数中,经过至多一次位翻转(0变1或1变0)后能得到的连续1的最大长度 。例如,输入1775(二进制11011101111),翻转中间的0后变为11011111111,连续1的最大长度为8。

核心思路

代码通过维护两个变量curinsert来跟踪当前连续1的长度和包含一次翻转的最长长度:

  1. cur:记录当前连续1的长度(遇到0时重置为0)。
  2. insert :记录包含一次翻转的连续1的最大长度。每次遇到0时,insert更新为cur + 1(即把当前0翻转后的长度)。
  3. 遍历每一位 :检查每一位是0还是1,并更新curinsert的值,最终取最大值res

代码逐行解释

cpp 复制代码
int reverseBits(int num) {
    int res = 0;    // 最终结果:连续1的最大长度
    int cur = 0;    // 当前连续1的长度
    int insert = 0; // 包含一次翻转的连续1的长度

    for (int i = 0; i < 32; ++i)  // 遍历32位整数的每一位
    {
        if (num & (1 << i))  // 如果当前位是1
        {
            cur++;       // 连续1的长度加1
            insert++;    // 包含翻转的长度也加1
        }
        else  // 如果当前位是0
        {
            insert = cur + 1;  // 翻转当前0,长度为前面连续1的长度+1
            cur = 0;           // 重置当前连续1的长度为0
        }
        res = max(res, insert);  // 更新最大长度
    }

    return res;
}

关键逻辑分析

  1. 遇到1时
    • curinsert都加1,表示连续1的长度增加。
  2. 遇到0时
    • insert更新为cur + 1,即假设翻转当前0后的总长度。
    • cur重置为0,因为当前连续1的序列被打断。
  3. 为什么有效?
    • 每次遇到0时,insert记录了"上一段连续1 + 当前翻转的0"的长度。
    • 如果后续还有连续1,insert会继续累加,相当于"上一段连续1 + 翻转的0 + 新的连续1"。

示例验证

输入num = 1775(二进制11011101111):

复制代码
位: 1 1 0 1 1 1 0 1 1 1 1 0 ...(其余为0)
i   0 1 2 3 4 5 6 7 8 9 10 11...
cur 1 2 0 1 2 3 0 1 2 3 4 0...
ins 1 2 3 1 2 3 4 1 2 3 4 5...
res 1 2 3 3 3 3 4 4 4 4 4 5...

最终res = 8(翻转第6位后的连续长度)

总结

这段代码巧妙地利用一次遍历,通过维护两个变量curinsert,在线性时间内计算出翻转至多一位后的最长连续1的长度。其核心思想是动态更新包含一次翻转的最大长度,确保正确性的同时保持高效性。

相关推荐
l12345sy13 分钟前
Day23_【机器学习—聚类算法—K-Means聚类 及评估指标SSE、SC、CH】
算法·机器学习·kmeans·聚类·sse·sc·ch
_Coin_-25 分钟前
算法训练营DAY58 第十一章:图论part08
数据结构·算法·图论
scx201310041 小时前
P13929 [蓝桥杯 2022 省 Java B] 山 题解
c++·算法·蓝桥杯·洛谷
阿方.9181 小时前
《数据结构全解析:栈(数组实现)》
java·开发语言·数据结构
YC运维1 小时前
Ansible题目全解析与答案
java·算法·ansible
小欣加油2 小时前
leetcode 912 排序数组(归并排序)
数据结构·c++·算法·leetcode·排序算法
山河君2 小时前
webrtc之高通滤波——HighPassFilter源码及原理分析
算法·音视频·webrtc·信号处理
星辰大海的精灵2 小时前
SpringBoot与Quartz整合,实现订单自动取消功能
java·后端·算法
data myth3 小时前
力扣1210. 穿过迷宫的最少移动次数 详解
算法·leetcode·职场和发展
惯导马工3 小时前
【论文导读】AI-Assisted Fatigue and Stamina Control for Performance Sports on IMU-Gene
深度学习·算法