( 位运算 ) 338. 比特位计数 ——【Leetcode每日一题】

news2024/11/27 18:28:59

❓338. 比特位计数

难度:简单

给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。

示例 1:

输入:n = 2
输出:[0,1,1]
解释:
0 --> 0
1 --> 1
2 --> 10

示例 2:

输入:n = 5
输出:[0,1,1,2,1,2]
解释:
0 --> 0
1 --> 1
2 --> 10
3 --> 11
4 --> 100
5 --> 101

提示:

  • 0 < = n < = 1 0 5 0 <= n <= 10^5 0<=n<=105

进阶:

  • 很容易就能实现时间复杂度为 O ( n l o g n ) O(n log n) O(nlogn) 的解决方案,你可以在线性时间复杂度 O ( n ) O(n) O(n) 内用一趟扫描解决此问题吗?
  • 你能不使用任何内置函数解决此问题吗?(如,C++ 中的 __builtin_popcount

💡思路:位运算

基础知识必知:一篇文章搞懂位运算 !

对于数字 6(110),它可以看成是 4(100) 再加一个 2(10),因此 dp[i] = dp[i&(i-1)] + 1;

即,使用位运算 去除最低的那一位 1,此时的 dp[i&(i-1)]已经计算过,然后再加上最低为的这个 1

🍁代码:(Java、C++)

Java

class Solution {
    public int[] countBits(int n) {
        int[] ans = new int[n + 1];
        for(int i = 1; i <= n; i++){
            ans[i] = ans[i & (i - 1)] + 1;
        }
        return ans;
    }
}

C++

class Solution {
public:
    vector<int> countBits(int n) {
        vector<int> ans(n + 1);
        for(int i = 1; i <= n; i++){
            ans[i] = ans[i & (i - 1)] + 1;
        }
        return ans;
    }
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n),对于每个整数,只需要 O ( 1 ) O(1) O(1) 的时间计算「一比特数」。
  • 空间复杂度 O ( n ) O(n) O(n),除了返回的数组以外,空间复杂度为常数。

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我 leetCode专栏,每日更新!

注: 如有不足,欢迎指正!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/533415.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaScript变量声明

声明变量三个var let和const 1.首先var先排除&#xff0c;老派写法&#xff0c;问题很多&#xff0c;可以淘汰掉… 2.const优先&#xff0c;尽量使用const,原因&#xff1a; &#xff08;1&#xff09;const语义化更好 &#xff08;2&#xff09;很多变量声明的时候就知道它不会…

中本聪思想精髓难以领悟?Web3实际上还在“幻想”之中?

Web3概念是不错&#xff0c;有人说它是下一代互联网&#xff0c;有人说它是NFT和元宇宙等未来应用的基础设施。然而理论炒得火热&#xff0c;但却仍不见像ChatGPT一样能引爆市场的杀手级应用出现。 原因在于&#xff0c;当前的Web3概念是对中本聪思想的不断概括和提炼&#xff…

21 KVM管理虚拟机-在线修改虚拟机配置

文章目录 21 KVM管理虚拟机-在线修改虚拟机配置21.1 概述21.2 操作步骤 21 KVM管理虚拟机-在线修改虚拟机配置 21.1 概述 虚拟机创建之后用户可以修改虚拟机的配置信息&#xff0c;称为在线修改虚拟机配置。在线修改配置以后&#xff0c;新的虚拟机配置文件会被持久化&#x…

高通410 随身WIFI刷入Debian系统(玩法合集)

引言 刚接触到这个项目是在b站上&#xff0c;刷到一位UP主的视频&#xff1a;https://b23.tv/xAFWiTF 其实现了在搭载高通410芯片的随身WIFI烧录linux系统&#xff0c;并在上面部署了chatGPT-Next网站服务。 本人参考的教程链接和其教程所有工具&#xff1a;https://pan.bai…

域名历史查询-免费批量域名历史快照注册时间查询软件

域名历史查询 域名历史查询是指通过查询工具&#xff0c;查询一个域名在过去的历史记录&#xff0c;包括注册时间、过期时间、更改记录、备案信息、WHOIS信息、IP记录、Alexa排名、流量统计等方面。通过查询域名的历史信息&#xff0c;研究者可以了解域名过去的状态&#xff0…

Map与Set中的两大实现类✌

map与set中的两大实现类 map和setSet的两种常用形态Map的两种常用形态实战&#x1f4aa; map和set 哈希表&#xff08;hashMap&#xff09;和 集合 (Set)是数据结构中比较常用的一部分&#xff0c;他们的特性通常可以解决很多问题&#xff0c;这两个数据结构是同根生&#xff…

Python开发之实现SG滤波

Python开发之实现SG滤波 1 SG滤波2 借助Python中的scipy.signal库实现SG滤波3 手动代码实现SG滤波 前言&#xff1a;主要介绍SG滤波的Python实现&#xff0c;顺带介绍SG滤波的实现原理。 1 SG滤波 Savitzky-Golay滤波器&#xff08;通常简称为S-G滤波器&#xff09;最初由Savi…

一百一十六、Zeppelin——Zeppelin0.9.0连接ClickHouse21.9.5.16(亲测有效,附步骤截图)

版本&#xff1a;Zeppelin0.9.0 ClickHouse21.9.5.16 1.目标&#xff1a;Zeppelin连上clickhouse&#xff0c;可以把clickhouse中的数据做可视化展示 2.参考文件&#xff1a;如何基于zeppelin JDBC Interpreter进行jdbc数据源的可视化交互分析 http://t.csdn.cn/DGH…

数智融合 | 美格智能助力AIGC产业迈向新未来

5月11日&#xff0c;在2023 “高通&美格智能物联网技术开放日”深圳站活动上&#xff0c;美格智能副总经理金海斌以《数智引领 融合创新》为题分享了5GAIoT技术赋能的价值展望。 ▲美格智能副总经理 金海斌 ▌算力&#xff1a;数字经济时代的“石油” 今年&#xff0c;由C…

Spring Boot 拦截器

Spring Boot 拦截器介绍 Spring Boot 拦截器是 AOP 的一种实现&#xff0c;专门拦截对控制层的请求&#xff0c;主要应用于判断用户权限&#xff0c;拦截webSocket请求。SpringBoot中的拦截器实现和spring mvc 中是一样的&#xff0c;它的大致流程是&#xff0c;先自己定义一个…

软件测试注意面试官的常规“套路”

一、自我介绍 这里就不过多阐述了&#xff0c;相信很多小伙伴都有。 二、灵活问题 1、大概说说之前公司的测试流程。 2、测试报告有哪些内容? 3、如何保证用例的覆盖度? 4、什么是测试用例,什么是测试脚本?两者的关系&#xff1f; 5、Bug的级别&#xff0c;按照什么划…

使用Simulink中的MATLAB Function模块存在的bug

为什么simulink中的MATLAB Function 模块需要按Ctrl+C才能中断程序??? 否则就会像这样一直是正在运行!!需要按Ctrl+C才能中断循环!!神奇的是每次需要按Ctrl+C才可运行simulink程序?? 再次打开Simulink中MATLAB function模块会出现以下bug: function [qr, qr_a, qr…

【Android Jetpack】新一代导航管理——Navigation

前言 不知道小伙伴们是否注意到&#xff0c;用AS创建一个默认的新项目后&#xff0c;MainActivity已经有了很大的不同&#xff0c;最大的区别就是新增加了两个Fragment&#xff0c;同时我们注意到这两个Fragment之间跳转的时候并没有使用之前FragmentTransaction这种形式&…

Nginx基本使用以及部署前端项目

前言 最近学习了一下Nginx&#xff0c;整理了一个博客&#xff0c;主要参考的是狂神说的b站视频教程&#xff0c;文章链接如下&#xff1a;狂神说Nginx快速入门 一、下载、启动Nginx 1.下载Nginx 到Nginx官方选择自己电脑适用的稳定版本下载&#xff0c;我下载的的windows版…

Web Components

1、前期回顾 JavaScript沙箱 1.1、什么是沙箱 在计算机安全中&#xff0c;沙箱&#xff08;Sandbox&#xff09;是一种用于隔离正在运行程序的安全机制&#xff0c;通常用于执行未经测试或者不受信任的程序或代码&#xff0c;它会为待执行的程序创建一个独立的执行环境&#x…

图解LeetCode——206. 反转链表

一、题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 二、示例 2.1> 示例 1&#xff1a; 【输入】head [1,2,3,4,5] 【输出】[5,4,3,2,1] 2.2> 示例 2&#xff1a; 【输入】head [1,2] 【输出】[2,1] 2.3> 示例 3&#…

六级备考32天|CET-6|分数分布|题型分布|翻译·贴春联·CCTV·印章|16:30~17:47

目录 英语六级总分&#xff1a;710分 一、英语六级作文 二、听力部分 248.5分 三、阅读理解35% 248.5分 四、翻译部分 汉译英 15% 106.5分 五、做题技巧 写作和翻译需要重点强化练习&#xff01; 六、积累 英语六级总分&#xff1a;710分 一、英语六级作文 说明&…

HTTP第13讲——HTTP的实体数据

数据类型与编码 在 TCP/IP 协议栈里&#xff0c;传输数据基本上都是“headerbody”的格式。但 TCP、UDP 因为是传输层的协议&#xff0c;它们不会关心 body 数据是什么&#xff0c;只要把数据发送到对方就算是完成了任务。 而 HTTP 协议则不同&#xff0c;它是应用层的协议&am…

pytorch实战11:基于pytorch简单实现DCGAN

基于pytorch简单实现DCGAN 前言 ​ 最近会把一些简单的CV领域的架构进行复现&#xff0c;完整的代码在最后。 本系列必须的基础 ​ python基础知识、CNN原理知识、pytorch基础知识 本系列的目的 ​ 一是帮助自己巩固知识点&#xff1b; ​ 二是自己实现一次&#xff0c;可以发…

ZED使用指南(五)Camera Controls

六、其他 1、相机控制 &#xff08;1&#xff09;选择视频模式 左右视频帧同步&#xff0c;以并排格式作为单个未压缩视频帧流式传输。 在ZED Explorer或者使用API可以改变视频的分辨率和帧率。 &#xff08;2&#xff09;选择输出视图 ZED能以不同的格式输出图像&#xf…