每日一题——翻转数位

学习目标:

每天睡前是否感到浑浑噩噩,一天又在不知不觉中过去,回想我今天都干了什么呢?

啊~我这一天又什么也没干,好有罪恶感啊,不行,我明天一定要好好学算法(手动狗头)。

明日复明日,明日何其多?不要等明天啦,和小编一起,每天睡前一道算法题,不仅解决你一天的空虚,更能助你安心入眠,远离熬夜。还能学到一点算法知识。不要小看这些知识哦,不积跬步无以至千里,不积小流无以成江海。每位大佬都不是一夜成名,都是从小白做起,日积月累,终成大佬,和小编一起,每日一题,走向大佬之路吧!


学习内容:

我们的题基本都是一些较为基础,适合日(睡)常(前)看的题,不会让你一眼就看出答案,是稍稍一点脚就能摸到头绪,但是在想的过程中又一时不知如何实现,再一想,又柳暗花明,最终跟着小编的思路一起解决问题,有不同思路可以发在评论区,一起讨论。“你若在,我必回”。


我们今天的题目是一道简单的有关二进制和dp思想的题目。先来看题:

给定一个32位整数 num,你可以将一个数位从0变为1。请编写一个程序,找出你能够获得的最长的一串1的长度。

示例 1:

输入: num = 1775(11011101111)2
输出: 8
示例 2:

输入: num = 7(0111)2
输出: 4

题目要我们将num二进制的某个0变成1,使得能找到最长的连续的一串1。

我们的方法很巧妙,只要维护三个变量:now表示当前一共有多少个连续的1,遇到0就归0;bu表示遇0变成1+之前连续1的个数now;sum表示每一次bu的最大值。接下来就是我们的代码:

class Solution {
public:
    int reverseBits(int num) {
        int max=0,bu=0,now=0,i;
        for(i=0;i<32;i++){
            if(num&(1<<i)){
                now++;
                bu++;
            }
            else{
                bu=now+1;
                now=0;
            }
            max=max>bu?max:bu;
        }
        return max;
    }
};

眼看千遍不如手动一遍,大家看完也来自己写一下吧!

反转数位icon-default.png?t=M1L8https://leetcode-cn.com/problems/reverse-bits-lcci/ 

每天坚持是一件很累的事,即使很慢,但也不要停止。


大家记得点赞收藏,防止找不到哦。

欢迎大家订阅小编的每日一题专栏,会每天更新,都是用心准备的哦!

若有不同思路,欢迎评论区留言,看到必回,Goodnight!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的代码no摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值