比特位计数问题

2024-01-05 22:18
文章标签 比特 计数问题

本文主要是介绍比特位计数问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.题目描述

给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。

示例 1:

输入: 2
输出: [0,1,1]
示例 2:

输入: 5
输出: [0,1,1,2,1,2]
进阶:

给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗?
要求算法的空间复杂度为O(n)。
你能进一步完善解法吗?要求在C++或任何其他语言中不使用任何内置函数(如 C++ 中的 __builtin_popcount)来执行此操作。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/counting-bits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二.思路

动态规划:有两种思路或者说有两种递推公式

(1)C[i]=C[i//2] if i 是偶数;C[i]=C[i-1] if i 是奇数

(2)C[i]=C[i-b]+1 b=2^m 且 i>b>i//2

关键是找到当前数的1的个数跟之前的数的1的个数之间的关系

第一种方法的代码如下:

class Solution:def countBits(self, num: int) -> List[int]:Count=[0 for i in range(num+1)]Count[0]=0for i in range(1,num+1,1):if i%2==1:Count[i]=Count[i-1]+1else:Count[i]=Count[i//2]return Count

 

这篇关于比特位计数问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/574328

相关文章

python-计数问题

题目描述 试计算在区间 1 到 n 的所有整数中,数字 x(0≤x≤9)共出现了多少次?例如,在 1 到 11 中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 4 次。输入格式 2 个整数 n,x,之间用一个空格隔开。输出格式 1 个整数,表示 x 出现的次数。样例 #1样例输入 #1 11 1样例输出 #1 4提示 对于 100% 的数据,1≤n≤106,0≤x≤

【加密社】比特币海量数据问题解决方案

加密社 比特币是无敌的存在,刚翻了一遍中本聪的论文(其实以前看过一次,那时不明觉厉),发现咱们一直在考虑的问题,基本都能在其论文上找到解决方案了。。 现在出现的这些问题,完全是因为bitcoin-qt、bitcoind的实现有问题,根据其设计思想,完全是可以解决的。 (比如可以二次开发一些轻量级的神器来辅助的。) 现阶段,主要发现的问题有: 1. 庞大的数据库问题。 2. 未来单位时

比特币网络和支付

1. 比特币网络         比特币网络是一个去中心化的点对点网络,节点之间可以直接进行交易。网络上有不同类型的节点。 1.1 比特币网络的节点         比特币网络的节点有两种主要类型:全节点也称为完整节点和简单支付验证(Simple Payment Verification,SPV)节点。         全节点可以执行比特币钱包、矿工、完整区块链存储和网络路由等全功能的比特

Python基础知识:bit(比特)与Byte(字节)的区别与关系

1.bit:位 (小写b) 也称比特 是英文 binary digit的缩写 二进制数系统中,每个0或1就是一个位(bit) 位是数据存储(计算机中信息)的最小单位 计算机中的CPU位数指的是CPU一次能处理的最大位数。例如32位计算机的CPU一次最多能处理32位数据 2.Byte:字节(大写B) 8bit就称为一个字节(Byte), 1Byte=8bit 记为Byte或B,是计算机中信息的

ES多键聚合桶个数计数问题

ES多键聚合桶个数计数问题 开发验证过程中,ElasticSearch聚合时不显示桶的个数,在进行数据核对时非常麻烦。这里有几个解决方案: java代码中计数     java代码中发送查询后,返回response,buckets返回是一个数组,可以获取数组的大小,即聚合桶的数量。我知道这个解决方案可能被喷。 ES使用查询语句计数 GET cn_order*/_search{"siz

【IC设计】跨时钟异步处理系列——单比特跨时钟

文章目录 建立时间和保持时间单比特信号的跨时钟处理慢时钟域的信号传输到快时钟域打两拍 快时钟域的信号传输到慢时钟域方案一 脉冲展宽+同步 (打拍打拍,进行或)代码原理图 方案二 脉冲电平检测+双触发器同步+边沿检测代码原理图 建立时间和保持时间 所谓的建立时间或者保持时间都是在描述一种时钟变化的边沿上的数据状态。建立时间:在时钟的有效沿(以上升沿为例)到来之前,数据的输入端

1423. [NOIP2013]计数问题

【题目描述】       试计算在区间1到n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如,在1到11中,即在1、2、3、4、5、6、7、8、9、10、11中,数字1出现了4次。 【输入格式】        输入共1行,包含2个整数n、x,之间用一个空格隔开。 【输出格式】       输出共1行,包含一个整数,表示x出现的次数。 【样例输入】 11 1 【样例输出】 4 【提示】

338. Counting Bits 比特位计数

https://leetcode-cn.com/problems/counting-bits/description/ Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1’s in their binary represent

数位统计DP——AcWing 338. 计数问题

数位统计DP 定义 数位DP(Digital DP)是一种用于解决与数字的数位相关问题的动态规划算法。它将数字的每一位看作一个状态,通过转移状态来计算满足特定条件的数字个数或其他相关统计信息。 运用情况 统计满足特定条件的数字个数,例如在给定范围内有多少个数字满足某些数位特征。计算数字的某个数位上的特定统计信息,如出现的数字频率等。解决与数字排列、组合相关的问题。 注意事项 数位DP的

比特币-系统架构师(十四)

1、传统的软件生命周期划分为:软件定义、软件开发、软件运行、软件维护。 2、以下关于区块链所用系统重挖矿行为描述中,错误的是()。 A旷工挖矿取得区块链计账权,同时获得代币 B挖矿本质是尝试计算一个hash碰撞 C挖矿本质是一种工作量证明机制 D防止比特币双花攻击 解析: 比特币通过“挖矿”来生成新的比特币,实质是计算机解决一项复杂的数学问题,来保证比特币网络分布式记账的一致