leetcode 338 比特位计算(位运算)

1的个数(lowbit 函数应用) 描述 给定一个十进制非负整数N,求其对应2进制数中1的个数。 输入 输入包含一行,包含一个非负整数N。(N < 109) 输出 输出一行,包含一个整数,表示N的2进制表示中1的个数。 样例输入 100 样例输出 3 这道题比较简单,如果一个数不能被2整除,那么这个数二进制形式的最后一位就是1,可以通过这个来判断1的个数。 #include <iostream> #include ... 阅读详情

目录

 

题目描述:

lowbit函数介绍&题目解析:

C++完整代码:


题目描述:

题目来源       力扣(LeetCode):https://leetcode-cn.com/problems/counting-bits

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

示例 1:

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

示例 2:

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

lowbit函数介绍&题目解析:

(一). 定义函数lowbit(int x) {return x&(-x);}  

(二).lowbit(x)函数获取非负整数x在二进制表示下“最低位的1及其后面所有0”构成的数值:

(1)如十进制数20的8位二进制表示为(0001 0100),因为其“最低位的1及其后面所有0”对应二进制为(0000 0100),所以lowbit(20)的数值就是4。

(2)更一般的理解:x&(-x)就是把正整数x与其负数-x,在二进制补码表示下按位做与运算。(-x)的补码由x按位取反再加1得到,假如将x只取反而不加1得到一个数y。那位运算x&y必然等于0,因为x和y的二进制数对应位取反之后不可能同时为1。若x二进制的最低位是从右往左第i个数,那么0~i-1之间的数就全是0。取反后得到的y的0~i-1之间的数就全是1,而第i个为0。根据二进制的加法可以知道,(y+1)的第0~i-1之间的数就全为0了,进位导致第i个数为1,同时进位不影响i+1及其后面的数。故x&(y+1)得到的二进制数只有第i个数是1,其它全为0。所以就不难理解(二)的描述了。

(3)总结规律:lowbit(x)等同于“能整除x的最大的2的幂次”。由(2)的描述可知lowbit(x)=x&(~x+1)=x&(-x)。

(三)如何获取一个数a的二进制表示下1的个数:在a中减去最低位对应的数a&(-a)获得一个新数,再对新数执行同样操作直到a为0。统计操作的次数即可得到1的个数。

C++完整代码:

class Solution {
public:
int lowbit(int x){
    return x&(-x); 
      }
    vector<int> countBits(int num) {
     vector<int>ans;
     for(int i=0;i<=num;i++){
      int x=i,cnt=0;
      while(x>0){     // 计算数i对应二进制中1的个数
       cnt++;
       x=x-lowbit(x); 
      }
     ans.push_back(cnt);    
     }
    return ans;    
   }

  };

 

上一篇博客:单调队列+滑动窗口例题题解


 

338. 比特位计数 (动态规划) 力扣题解《卑鄙的异乡人,巧妙的动态规划(图解过程))》 方法一:暴力计算 思路 从 000 至 numnumnum 遍历,将每一个数字转换成二进制,转换同时计算包含几个 111 这里采用了模拟短除的方法,对数字不断做除法,保存余数,并将数字用商替换。 复杂度分析 时间复杂度 O(N∗len(N))O(N*len(N))O(N∗len(N)):遍历需要 O(N)O(N)O(N),将每个数转二进制需要 O(len(N))O(len(N))O(len(N)),其中 len(N)len(N)len(N) 表 阅读详情

相关推荐

关于mos管的压降问题(项目遇到问题总结)

在研发过程中没有出现问题的板子,到了小批时竟出现雷达一直在触发???找了大几天,没有头绪。心中疑惑颇多,加上老板催促,自考等原因,真是压力山大。4月份自考,只有差不多一个月时间了吧,没有什么大的收获,反而在查找硬件问题的过程中,发现了一个自己忽视的一个问题,就是关于Mos管的压降问题。 备考的过程崎岖不平,工作又问题多多,孰轻孰重,如何取舍?从心理来说,不想取舍什么,只是有所得就可以,过不了就过不了呗,已经毕业十五年了,没这个本科文凭不也过来了吗?只是代表了自己在这一段时间的思考,自己兴趣吧,没什么大不了

guangod的博客 2万+

acwing.二进制中1的个数(lowbit函数的应用)

lowbit(x) : 返回x二进制表示的最后一位1; eg: lowbit(10) : 即返回10的二进制表示:1010的最后一位1:即10; 10010101000 最后一位1为1000; 代码实现: int lowbit(int x) { return x&(-x); } ps: -x指对先求反码再加一; 之后对x进行&运算可以得到最后一位1; ps: 1&1=1; 1&0=0; 0&0=0; #include<iostream> usin

porting的博客 486

GROMACS自由能景观图绘制全流程:从PCA分析到Origin 3D可视化(附避坑指南)

本文详细解析了使用GROMACS绘制自由能景观图的全流程,涵盖从PCA分析、数据预处理、自由能计算到最终在Origin中进行3D可视化的完整步骤。文章重点分享了数据处理与格式转换中的常见“避坑”指南,帮助研究者从分子动力学轨迹中有效提取并解读构象自由能信息,深化对生物大分子动力学过程的理解。

oauth7security的博客 309

lowbit()函数

lowbit()函数用来取一个二进制最低位的一与后边的0组成的数 例如: 5=101 ==> lowbit(5)=1 6=110 ==> lowbit(6)=2(10) 算法: int lowbit(int x) { return x&(-x); } 原理:二进制数的负数是正数取反加一 ...

杳杳捞到月亮了吗 3138

嵌入式面试|MCU+RTOS技术栈——面试八股文整理3:STM32

stm32

weixin_44800059的博客 1901

VulnHub系列之BadStore_123渗透测试

BADSTORE: 1.2.3 早期网商系统漏洞鉴赏(2004)

Flynn的博客 1630

常用技巧 —— 位运算 —— 位运算的应用

1.lowbit:计算一个数字 x 二进制下最低位 1 对应的值 方法: int lowbit(int x){ return x&(-x); } lowbit 利用了补码的特性:正数的补码是其自身,负数的补码是正数按位取反后加一 例如:10 的补码是 1010,-10 的补码是 0110,按位相与后,即可得到 x 二进制下最低位 1 对应的值,即 lowbit(10)=2...

Alex_McAvoy的博客 967

坐标偏移不一致或瓦块重名的多个OSGB工程的融合

介绍如何使用实景三维小助手OSGBLab对坐标偏移不一致或瓦块重名的多个OSGB工程的融合

OSGBLab的博客 3232

位运算基础

位运算的基本用法

QSMYYDS的博客 219

【VisionMaster】图像源模块之本地图像

图像采集之图像源

zhy29563 6959

谈谈SAP顾问的几个发展趋势

大家新年好,今天想聊一下对SAP顾问发展趋势的一些个人见解。过去10多年得益于我国的经济发展,外资不断加大在中国的投资和中国企业的发展,SAP顾问行业得到了很大的发展和壮大。那么未来几年SAP顾问的职业发展到底怎么样呢?

syounger的专栏 2513

定个小目标之刷LeetCode热题(41)

今天看一下这道简单题,主要考查。,计算其二进制表示中 1。

qq_45682662的博客 425

Allegro负片层不显示反盘的原因和解决办法

在用Allegro做PCB设计的时候,负片设计是较为常用的一种方式,有时会出现打开负片层却看不到反盘的情况,如下图。如何才能看到反盘显示的效果,具体操作如下。负片层不显示反盘的原因和解决办法。L2层仍然只能看到盘。

weixin_54787054的博客 2160

Leetcode :338. 比特位计数(位运算)

338. 比特位计数 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: 5 输出: [0,1,1,2,1,2] 这道题是一道力扣中等位运算题,如果用遍历的方法来做,每次求出该数的位数,很简单就能过 但中等题自然有更精妙的方法,动态规划,这里只写一下动态规划+最低有效位的方法, x=(1001011101) ​x/2=(100101110) 只有最低

stackempty2的博客 261

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

leetcode338---比特位计数

leetcode338—比特位计数原题链接 题意简述 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: 5 输出: [0,1,1,2,1,2] 解题分析 位运算 HmDis(int num): 计算数字num其二进制数中的 1 的数...

Again的博客 512

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【简单】力扣算法题解析LeetCode338:比特位计数

LeetCode 338要求生成0到n的二进制中1的个数数组。需满足: 时间复杂度O(n),空间复杂度O(n); 禁止调用内置函数,需手动实现位计数; 动态规划解法:利用i & (i-1)递推,bits[i] = bits[i & (i-1)] + 1; 边界处理:n=0时输出[0],n=5时输出[0,1,1,2,1,2]。 核心思路 通过位运算性质优化计算:每个数的1的个数等于其最低有效位清零后的结果加1。Java实现仅需一次遍历,高效准确。

ylumwd的博客 1554

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

​LeetCode338. 比特位计数【位运算+动态规划】

【代码】​LeetCode338. 比特位计数【位运算+动态规划】

qq_63275583的博客 221

【力扣每日一题】338. 比特位计数

【力扣每日一题】338. 比特位计数 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: 5 输出: [0,1,1,2,1,2] 原题 最直观的方法是对从 00 到 \textit{num}num 的每个数直接计算「一比特数」。 每个 \texttt{int}int 型的数都可以用 3232 位二进制数表示,只要遍历其二进制表示的每一位即可得到 11 的数目。

weixin_45459322的博客 236

LeetCode 338. 比特位计数

【代码】LeetCode 338. 比特位计数。

virtual_YL的博客 327

每日一题:2021.3.8.338. 比特位计数

每日一题:2021.3.8.338. 比特位计数 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: 5 输出: [0,1,1,2,1,2] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/counting-bits 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 盲区: 1.对“&

biyunqian123的博客 209

Leetcode-338. 比特位计数

Leetcode-338. 比特位计数前言问题描述题目分析常规题解高级题解参考 前言 这是一道涉及位运算的题目,读者对位运算不是很熟悉或者有遗忘的话,可以看一下这篇文章,方便理解。 java位运算详解:https://blog.youkuaiyun.com/qq_42265220/article/details/118386893?spm=1001.2014.3001.5501 问题描述 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。

qq_42265220的博客 189

C++ | Leetcode C++题解之第338题比特位计数

C++ | Leetcode C++题解之第338题比特位计数

Ddddddd_158的博客 460

Leetcode 338.比特位计数(Counting Bits)

Leetcode 338.比特位计数 1 题目描述(Leetcode题目链接)   给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 输入: 2 输出: [0,1,1] 输入: 5 输出: [0,1,1,2,1,2] 进阶: 给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线...

qq_39378221的博客 237

338. 比特位计数 & 191. 位1的个数(二进制的特点)【M S】

338. 比特位计数 1. 暴力解 写一个方法,用来计算某个数的二进制中1的个数 然后循环0~num,每次循环都调用该方法。时间复杂度为O(n*sizeof(integer)) ——很显然,存在重复计数,我们需要发现数字时间的规律 2. 基于数学的动态规划 更确切说,这个是一个数学题,当你发现规律时,你会利用朴素的动态规划思想 首先,我们知道*2,就是一个左移1位操作<<1,那么左移1位,是不会改变二进制表示中1的个数的 所以当我们知道2,就能推出4 那6如何推出呢,需要知道3,那么3如何

hahahaqwe123的博客 388

338. 比特位计数. ( dp + 最低有效位 )

LeetCode: 338. 比特位计数 两倍关系的两个数, 只有一位不同,可以看作是移除了最低位的结果。然后判断两倍高的数是偶还是奇。进行 + 1 或者不加。 AC Code class Solution { public int[] countBits(int num) { int[] dp = new int[num + 1]; for (int i = 1; i <= num; i++) { dp[i] = dp[i /

lankerens 350

leetcode 比特位计数

leetcode 比特位计数 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

yingmu__的博客 652
上一篇: 单调队列+滑动窗口例题题解
下一篇: 离散化实现详解
准图灵奖得主
博客等级 码龄8年 355粉丝 135原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值