LeetCode、338. 比特位计数【简单,位运算】

文章目录

前言

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

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

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

视频平台:b站-Coder长路


LeetCode、338. 比特位计数【中等,位运算】

题目链接与分类

题目链接:LeetCode、338. 比特位计数

分类:基础算法/位运算


思路

位运算移位处理

思路:暴力,来对所有数字的二进制位来进行模拟计算。

复杂度分析:时间复杂度O(n.logn);空间复杂度O(n)

java 复制代码
class Solution {

    //10万数据量
    public int[] countBits(int n) {
        int[] res = new int[n + 1];
        for (int i = 0; i <= n; i ++) {
            int count = 0;
            int num = i;
            while (num != 0) {
                if (num % 2 == 1) count ++;
                num = num >> 1;
            }
            res[i] = count;
        }
        return res;
    }
}

前缀思想实现

思路:二叉树来保存1-n,左子树使用0、右子树使用1,左边表示+1,右边表示x2+1。

复杂度分析:时间复杂度O(n);空间复杂度O(n)

java 复制代码
class Solution {
    // 主函数,计算 0 到 n 的每个数字的二进制表示中包含的 1 的个数
    public int[] countBits(int n) {
        int[] res = new int[n + 1]; // 初始化结果数组
        // 从数字1开始进行深度优先搜索
        dfs(1, n, 1, res);
        return res;
    }

    // 深度优先搜索函数
    private void dfs(int num, int max, int cnt, int[] res) {
        if (num > max) { // 如果当前数字大于给定的最大值,结束递归
            return;
        }
        res[num] = cnt; // 更新结果数组,记录当前数字的二进制表示中包含的1的个数
        // 递归调用左子树和右子树
        dfs(num << 1, max, cnt, res); // 左子树,1的个数不变
        dfs((num << 1) + 1, max, cnt + 1, res); // 右子树,1的个数加1
    }
}

资料获取

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

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

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


整理者:长路 时间:2024.2.13

相关推荐
Ocean☾几秒前
前端基础-html-注册界面
前端·算法·html
顶呱呱程序9 分钟前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
爱吃生蚝的于勒30 分钟前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
羊小猪~~34 分钟前
数据结构C语言描述2(图文结合)--有头单链表,无头单链表(两种方法),链表反转、有序链表构建、排序等操作,考研可看
c语言·数据结构·c++·考研·算法·链表·visual studio
王哈哈^_^1 小时前
【数据集】【YOLO】【VOC】目标检测数据集,查找数据集,yolo目标检测算法详细实战训练步骤!
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·pyqt
星沁城1 小时前
240. 搜索二维矩阵 II
java·线性代数·算法·leetcode·矩阵
脉牛杂德1 小时前
多项式加法——C语言
数据结构·c++·算法
legend_jz1 小时前
STL--哈希
c++·算法·哈希算法
kingmax542120082 小时前
初三数学,最优解问题
算法
一直学习永不止步2 小时前
LeetCode题练习与总结:赎金信--383
java·数据结构·算法·leetcode·字符串·哈希表·计数