当前位置: 首页 > news >正文

剑指 Offer:003 前 n 个数字二进制中 1 的个数

题目:

给定一个非负整数 n,请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数,并输出一个数组

示例:

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

解题思路:

  1. 先把从 0 到 n 的非负整数,放到数组里
  2. 把这些非负整数都转换为二进制
  3. 判断他们当中 1 的个数
  4. 把二进制中的 0 和 1 相加,然后输出成数组
  5. 数组中数的和就是这些数当中 1 的个数

 

 

 

 

部分编程语言有相应的内置函数用于计算给定的整数的二进制表示中的 111 的数目,例如 Java\texttt{Java}Java 的 Integer.bitCount\texttt{Integer.bitCount}Integer.bitCount,C++\texttt{C++}C++ 的 __builtin_popcount\texttt{\_\_builtin\_popcount}__builtin_popcount,Go\texttt{Go}Go 的 bits.OnesCount\texttt{bits.OnesCount}bits.OnesCount 等,

方法一:Brian Kcrnighan 算法

最直观的做法是对从 0 到 n 的每个整数直接计算【一比特数】。每个 int 型的数都可以用 32 位二进制数表示,只有遍历其二进制表示的每一位即可得到 1 的数目。

利用 Brian Kcrnighan 算法,可以在一定程度上进一步提升计算速度。

Brian Kcrnighan算法的原理:

对于任意整数 x,令 x = x&(x - 1),该运算将 x 的二进制表示的最后一个 1 变成 0。因此,对 x 重复该操作,直到 x 变成 0,则操作次数即为 x 的【一比特数】

 

func onesCount(x int) (ones int) {for ; x > 0; x &= x - 1 {ones++}return
}func countBits(n int) []int {bits := make([]int, n+1)for i := range bits {bits[i] = onesCount(i)}return bits
}

 

方法二:动态规划 —— 最高有效位

func countBits(n int) []int {bits := make([]int, n+1)highBit := 0for i := 1, i <= n; i++ {if i&(i-1) == 0 {highBit = i}bits[i] = bits[i-highBit] + 1}return bits
}

 

 

 

方法三:动态规划 —— 最低有效位

 

 

func countBits(n int) []int {bits := make([]int, n+1)for i := 1; i <= n; i++ {bit[i] = bits[i>>1] + i&1}return bits
}

 

方法四:动态规划 —— 最低设置位

func countBits(n int) []int {bits := make([]int, n+1)for i := 1; i <= n; i++ {bits[i] = bits[i&(i-1)] + 1}return bits
}

 

相关文章:

剑指 Offer:003 前 n 个数字二进制中 1 的个数

题目&#xff1a; 给定一个非负整数 n&#xff0c;请计算 0 到 n 之间的每个数字的二进制表示中 1 的个数&#xff0c;并输出一个数组 示例&#xff1a; 1、 输入: n 2 输出: [0,1,1] 解释: 0 --> 0 1 --> 1 2 --> 10 2、 输入: n 5 输出: [0,1,1,2,1,2] 解释: 0 …...

DDD系列:二、应用架构设计演变

作用: ​ 通过规定一个固定的架构设计&#xff0c;可以让团队内有一个统一的开发规范&#xff0c;降低沟通成本&#xff0c;提升效率和代码质量。 目标&#xff1a; ​ 在做架构设计时&#xff0c;一个好的架构应该需要实现以下几个目标&#xff1a; 独立于UI&#xff1a;前…...

Spring-IOC

IOC概念和原理 什么是IOC 控制反转&#xff0c;为了将系统的耦合度降低&#xff0c;把对象的创建和对象直接的调用过程权限交给Spring进行管理。 IOC底层原理 XML解析 ​ 通过Java代码解析XML配置文件或者注解得到对应的类的全路径&#xff0c;获取对应的Class类 Class clazz …...

基于Java语言开发B/S架构实现的云HIS

一、云HIS系统框架简介 1、技术框架 &#xff08;1&#xff09;总体框架&#xff1a; SaaS应用&#xff0c;全浏览器访问 前后端分离&#xff0c;多服务协同 服务可拆分&#xff0c;功能易扩展 &#xff08;2&#xff09;技术细节&#xff1a; 前端&#xff1a;AngularNg…...

清洁赛道新势力,米博凭“减法”突围?

在五四青年节这个特殊的日子&#xff0c;方太旗下的高端智能清洁品牌“米博”发布了新一代无滚布洗地机7系列。 5月4日晚&#xff0c;米博以“减法生活&#xff0c;净请7代”为主题&#xff0c;举办了新品发布会。在发布会上&#xff0c;从小红书翻红的董洁作为方太集团米博产…...

代码随想录训练营Day6| 242、349、202、1

242. 有效的字母异位词 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 class Solution {public boolean isAnagram(String s, String t)…...

IP-GUARD如何通过网络控制策略禁止应用程序联网?

如何通过网络控制策略禁止应用程序联网? 可以在控制台-高级-网络控制中,添加以下策略: 动作:“禁止” 应用程序:填写要禁止的程序(以QQ示例) 如何禁止没有安装客户端的电脑访问客户端电脑? 可以给所有客户端设置只允许客户端电脑访问的网络控制策略; 在控制台左边的…...

Java RSA密钥转换,从RSAPrivateKey得到RSAPublicKey

概述&#xff1a; 在Java编程中&#xff0c;我们经常用到如下一段代码来生成RSA公私钥&#xff0c;分别拿到公私钥然后加解密计算&#xff1a; KeyPairGenerator keyPairGen; keyPairGen KeyPairGenerator.getInstance("RSA"); keyPairGen.initialize(2048, new S…...

Android 12.0 Launcher3仿ios长按app图标实现抖动动画开始拖拽停止动画

1.概述 在12.0的系统rom定制化开发中,在对系统原生Launcher3的定制需求中,也有好多功能定制的,在ios等电子产品中 的一些好用的功能,也是可以被拿来借用的,所以在最近的产品开发需求中,需求要求模仿ios的 功能实现长按app图标实现抖动动画,接下来看如何分析该功能的实现…...

【五一创作】50道Java面试题

Java中的四种访问权限控制符分别是什么&#xff1f; 答&#xff1a;Java中的四种访问权限控制符分别是public、protected、default和private。 Java中的反射是什么&#xff1f;有什么作用&#xff1f; 答&#xff1a;Java中的反射是指在程序运行时动态获取类的信息和调用对象…...

4。计算机组成原理(3)指令系统

嵌入式软件开发&#xff0c;非科班专业必须掌握的基本计算机知识 核心知识点&#xff1a;数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统 指令系统&#xff08;Instruction Set&#xff09;是计算机体系结构的关键组成部分之一&#xff0c;它定义了处…...

【Elasticsearch】NLP简单应用

文章目录 NLP简介ES中的自然语言处理(NLP)NLP演示将opennlp插件放在ESplugins路径中下载NER模型配置opennlp重启ES、验证 NLP简介 NLP代表自然语言处理&#xff0c;是计算机科学和人工智能领域的一个分支。它涉及使用计算机来处理、分析和生成自然语言&#xff0c;例如英语、中…...

3. 云计算的落地实践(下)

本章讲解知识点 云计算如何落地实践ISO镜像文件创建虚拟机入门创建数据节点配置VMWare创建虚拟机三种网络模式1. 云计算的落地实践 上一章我们讲了云计算的业界实践,即:搭建IaaS后,用于创建虚拟机,在虚拟机上部署PaaS,用于管理同时部署在虚拟机上的容器,这就是业界普遍的…...

javaEE+mysql学生竞赛管理系统

本系统是基于JAVA平台开发的一套学生竞赛信息管理的系统。系统采用JSP为编程语言。数据库采用Mysql建立数据之间的转换。论文主要介绍了本课题的开发背景&#xff0c;所要完成的功能和开发的过程。重点的说明了系统设计的重点、设计思想、难点技术和解决方案。 本课题的目的是使…...

车辆出险记录查询API接口

车辆出险记录接口可以帮助车主、保险公司、交通管理部门等各方快速查询车辆的出险记录&#xff0c;了解车辆风险情况、核算保险费用等。这篇文章将探讨车辆出险记录接口的作用、应用场景、使用方式以及一些注意事项。 作用&#xff1a; 车辆出险记录接口主要解决了快速获取车…...

MySQL的概念,编译及安装

一.数据库的基本概念 1、数据&#xff08;Data&#xff09; • 描述事物的符号记录 • 包括数字&#xff0c;文字&#xff0c;图形&#xff0c;图像&#xff0c;声音&#xff0c;档案记录等 • 以“记录”形式按统一的格式进行存储 2、表 • 将不同的记录组织在一起 • …...

系统性能压力测试

系统性能压力测试 一、压力测试 压力测试是给软件不断加压&#xff0c;强制其在极限的情况下运行&#xff0c;观察它可以运行到何种程度&#xff0c;从而发现性能缺陷&#xff0c;是通过搭建与实际环境相似的测试环境&#xff0c;通过测试程序在同一时间内或某一段时间内&…...

从零开始学习Linux运维,成为IT领域翘楚(三)

文章目录 &#x1f525;Linux超级用户与伪用户&#x1f525;Linux文件基本属性&#x1f525;Linux权限字与权限操作 &#x1f525;Linux超级用户与伪用户 Linux下用户分为三类&#xff1a;超级用户、普通用户、伪用户 ⭐ 超级用户&#xff1a;用户名为root&#xff0c;具有一切…...

轻松搭建自己的ChatGPT聊天机器人,让AI陪你聊天!

随着人工智能技术的发展&#xff0c;聊天机器人已经成为了我们生活中的一部分。无论是在客服机器人上还是智能助手上&#xff0c;聊天机器人都能够给我们带来真正的便利和快乐。现在&#xff0c;你也可以轻松搭建自己的ChatGPT聊天机器人&#xff0c;和它天马行空地聊天&#x…...

CompletableFutrue异步处理

异步处理 一、线程的实现方式 1. 线程的实现方式 1.1 继承Thread class ThreadDemo01 extends Thread{Overridepublic void run() {System.out.println("当前线程:" Thread.currentThread().getName());} }1.2 实现Runnable接口 class ThreadDemo02 implements …...

【前端面经】JS-对象的可枚举性

JavaScript中的对象是非常重要的数据类型&#xff0c;它们作为编程中的基础构建块&#xff0c;可以被用来表示各种数据结构。对象是由属性构成的&#xff0c;每个属性都包含一个名字和一个值。属性值可以是基本类型或其他对象。在JavaScript中&#xff0c;对象属性有许多特性&a…...

沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置

目录 沁恒 CH32V208(一): CH32V208WBU6 评估板上手报告和Win10环境配置沁恒 CH32V208(二): CH32V208的储存结构, 启动模式和时钟沁恒 CH32V208(三): CH32V208 Ubuntu22.04 Makefile VSCode环境配置 硬件部分 CH32V208WBU6 评估板WCH-LinkE 或 WCH-Link 硬件环境与Windows下…...

日撸 Java 三百行day38

文章目录 说明day381.Dijkstra 算法思路分析2.Prim 算法思路分析3.对比4.代码 说明 闵老师的文章链接&#xff1a; 日撸 Java 三百行&#xff08;总述&#xff09;_minfanphd的博客-CSDN博客 自己也把手敲的代码放在了github上维护&#xff1a;https://github.com/fulisha-ok/…...

玩转肺癌目标检测数据集Lung-PET-CT-Dx ——④转换成PASCAL VOC格式数据集

文章目录 关于PASCAL VOC数据集目录结构 ①创建VOC数据集的几个相关目录XML文件的形式 ②读取dcm文件与xml文件的配对关系③创建VOC格式数据集④创建训练、验证集 本文所用代码见文末Github链接。 关于PASCAL VOC数据集 pascal voc数据集是关于计算机视觉&#xff0c;业内广泛…...

两种使用 JavaScript 实现网页高亮关键字的方法

随着各种类型的信息源变得越来越多&#xff0c;我们常常需要通过搜索引擎来找到自己需要的信息。在搜索结果中&#xff0c;通常会高亮显示与我们搜索的关键词相关的内容&#xff0c;这样我们就能更快地找到自己需要的信息。 在本文中&#xff0c;我们将探讨如何使用 JavaScrip…...

【SpringBoot】SpringBoot集成ElasticSearch

文章目录 第一步&#xff0c;导入jar包&#xff0c;注意这里的jar包版本可能和你导入的不一致&#xff0c;所以需要修改第二步&#xff0c;编写配置类第三步&#xff0c;填写yml第四步&#xff0c;编写util类第五步&#xff0c;编写controller类第六步&#xff0c;测试即可 第一…...

从 Elasticsearch 到 Apache Doris,10 倍性价比的新一代日志存储分析平台

作者介绍&#xff1a;肖康&#xff0c;SelectDB 技术副总裁 导语 日志数据的处理与分析是最典型的大数据分析场景之一&#xff0c;过去业内以 Elasticsearch 和 Grafana Loki 为代表的两类架构难以同时兼顾高吞吐实时写入、低成本海量存储、实时文本检索的需求。Apache Doris…...

探讨Redis缓存问题及解决方案:缓存穿透、缓存击穿、缓存雪崩与缓存预热(如何解决Redis缓存中的常见问题并提高应用性能)

Redis是一种非常流行的开源缓存系统&#xff0c;用于缓存数据以提高应用程序性能。但是&#xff0c;如果我们不注意一些缓存问题&#xff0c;Redis也可能会导致一些性能问题。在本文中&#xff0c;我们将探讨Redis中的一些常见缓存问题&#xff0c;并提供解决方案。 一、缓存穿…...

【Python】怎么在pip下载的时候设置镜像?(常见的清华镜像、阿里云镜像以及中科大镜像)

一、清华镜像 在使用 pip 命令下载 Python 包时&#xff0c;可以通过设置 pip 的镜像源为清华镜像来加快下载速度。 以下是如何设置清华镜像源的步骤&#xff1a; 打开终端或命令行窗口执行以下命令添加清华镜像源&#xff1a; pip config set global.index-url https://py…...

【AI面试】目标检测中one-stage、two-stage算法的内容和优缺点对比汇总

在深度学习领域中&#xff0c;图像分类&#xff0c;目标检测和目标分割是三个相对来说较为基础的任务了。再加上图像生成&#xff08;GAN&#xff0c;VAE&#xff0c;扩散模型&#xff09;&#xff0c;keypoints关键点检测等等&#xff0c;基本上涵盖了图像领域大部分场景了。 …...

青岛做网站/sem网络推广公司

开始打算自己yy写了半天 弃疗 采用权值线段树套主席树 BZOJ没A 数据被加强 各种无果后 弃疗 UPD 3.16&#xff1a; 要来了数据 负数的没问题 。。。 tmd 居然真给 MAX_LONG_INT 吓死我 改LL TLE 又改 卡时过 被fqk大爷无情嘲讽 #include <cstdio> #include <iost…...

python做网站原理/网站有吗免费的

前言 在JVM专栏的第一篇&#xff1a;我们讲了什么是双亲委派模型&#xff0c;以及为什么需要双亲委派模型。还没看过的大佬&#xff0c;有钱没钱都捧个人场&#xff0c;点它&#xff1a; 你能说出jvm的类加载是什么吗 同时还了解到这样设计是为了保持JVM整个体系的稳定。但在…...

东莞做网站网络公司/品牌宣传推广策划方案

CodeForces - 579E 可以发现结果关于x的函数是一个单谷函数&#xff0c;所以三分。 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define MAXN 200000 int a[MAXN10],n; double l[MAXN10]; void Read(int &x){char c…...

哪个网站做效果图好/seo专员是什么意思

这篇文章我们主要从整体上了解一下计算机程序是如何运行的。在此过程中&#xff0c;我们将会引出操作系统中一些很重要的概念&#xff0c;并在后续的文章中对这些概念将强化和深入理解。首先从计算机的硬件开始谈起。在这里我们只考虑和程序运行直接相关的硬件。其基本的硬件如…...

广州 天河网站设计/刚刚刚刚刚刚好痛

本文源码基于jdk1.8 。 一、创建线程有哪几种方式&#xff08;实现Runnable接口和继承Thread类&#xff09; Runnable 接口 我们看Thread类的定义知道&#xff0c;它实现了Runable接口 public class Thread implements Runnable {... } 而Runnable接口的定义如下: Functi…...

做视频解析网站违法不/优化大师 win10下载

示例1&#xff1a; 输入 5 1000000007 2 3 4 5 107输出 2 24 264 3240 736935633题意&#xff1a; 一个森林的代价为内部每个节点度数的平方和。问所有带标号的n 个点的森林的代价和 。 代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 5…...