翻转数位00

题目链接

翻转数位

题目描述

注意点

  • 可以将一个数位从0变为1
  • 找出能够获得的最长的一串1的长度(必须是连续的)

解答思路

  • 参照题解使用动态规划解决本题,对于任意一个位置i,dp[i][0]表示到达且包含第i位不翻转0最长1的长度,dp[i][1]表示到达且包含第i位翻转一个数位0最长1的长度
  • 如果位置idx的数位是0,那么如果不翻转0,该位置dp[idx][0] = 0,如果翻转0,该位置dp[idx][1] = dp[idx - 1][0] + 1;如果位置i的数位是1,那么如果不翻转0,该位置dp[idx][0] = dp[idx - 1][0] + 1,如果翻转0,该位置dp[idx][1] = dp[idx - 1][1] + 1,观察规律可得,任意位置idx的dp值只与idx - 1位置有关,所以并不需要存储所有位置的dp值,只需要保存前一个位置的dp值并实时更新res的值即可

代码

class Solution {
    public int reverseBits(int num) {
        int res = 0;
        // dp[i][0]表示到达且包含第i位不翻转0最长1的长度
        // dp[i][1]表示到达且包含第i位翻转一个数位0最长1的长度
        int[][] dp = new int[33][2];
        // int idx = 1;
        for (int idx = 1; idx <= 32; idx++) {
            if ((num & 1) == 1) {
                dp[idx][0] = dp[idx - 1][0] + 1;
                dp[idx][1] = dp[idx - 1][1] + 1;
            } else {
                dp[idx][0] = 0;
                dp[idx][1] = dp[idx - 1][0] + 1;
            }
            res = Math.max(res, Math.max(dp[idx][0], dp[idx][1]));
            num >>= 1;
        }
        return res;
    }
}

关键点

  • 动态规划的思想
  • 根据前一个位置的状态推出现在位置的状态

相关推荐

  1. slint1.32 官方文档翻译00

    2024-06-18 22:30:04       57 阅读
  2. 【MATLAB】 数据、矩阵、行、列翻转

    2024-06-18 22:30:04       65 阅读
  3. 数据结构--翻转字符串里的单词

    2024-06-18 22:30:04       36 阅读
  4. 01_02_mysql04_数据类型

    2024-06-18 22:30:04       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-18 22:30:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-18 22:30:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-18 22:30:04       87 阅读
  4. Python语言-面向对象

    2024-06-18 22:30:04       96 阅读

热门阅读

  1. 通用与垂直,难以预测的胜负之争。

    2024-06-18 22:30:04       31 阅读
  2. C#心跳机制的服务器(完整)

    2024-06-18 22:30:04       34 阅读
  3. 网络安全--安全设备(一)Dos

    2024-06-18 22:30:04       28 阅读
  4. ARP攻击和DNS攻击有什么区别

    2024-06-18 22:30:04       28 阅读
  5. 加密excel(Python)

    2024-06-18 22:30:04       31 阅读
  6. IPV6单播和多播地址

    2024-06-18 22:30:04       25 阅读
  7. ros1转ros2的注意事项

    2024-06-18 22:30:04       24 阅读
  8. 有限自动机解释和应用案例

    2024-06-18 22:30:04       24 阅读
  9. ROM 和 RAM

    2024-06-18 22:30:04       26 阅读
  10. mysql_ssl_rsa_setup使用详解

    2024-06-18 22:30:04       30 阅读
  11. 【OpenCV 基础知识 22】扩展边界并填充

    2024-06-18 22:30:04       31 阅读
  12. 05-5.5.1 哈夫曼树

    2024-06-18 22:30:04       29 阅读
  13. 01-GIt

    01-GIt

    2024-06-18 22:30:04      27 阅读
  14. 部署YUM仓库及NFS共享服务

    2024-06-18 22:30:04       26 阅读