【力扣】191.位 1 的个数

简介: 【力扣】191.位 1 的个数

191.位 1 的个数

题目描述

编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。

示例 1:

输入:n = 11

输出:3

解释:输入的二进制串 1011 中,共有 3 个设置位。

示例 2:

输入:n = 128

输出:1

解释:输入的二进制串 10000000 中,共有 1 个设置位。

示例 3:

输入:n = 2147483645

输出:30

解释:输入的二进制串 11111111111111111111111111111101 中,共有 30 个设置位。

提示:

  • 1 <= n <= 231 - 1

进阶:

  • 如果多次调用这个函数,你将如何优化你的算法?

解题方法

  • C 循环检查
int hammingWeight(int n) {
    int cnt = 0;
    unsigned int m = 0x1; // 必须定义为“无符号”型
    for (int i = 0; i < 32; i++) {
        if (n & (m << i)) {
            cnt++;
        }
    }
    return cnt;
}

复杂度分析

时间复杂度为 O(k),其中 k 是 int 型的二进制位数,k = 32。

空间复杂度为 O(1)。


相关文章
|
5月前
|
Java
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
66 1
|
3月前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
22 0
|
5月前
【力扣】485.最大连续 1 的个数
【力扣】485.最大连续 1 的个数
|
5月前
|
测试技术
【力扣】392.判断子序列
【力扣】392.判断子序列
|
5月前
【力扣】209. 长度最小的子数组
【力扣】209. 长度最小的子数组
|
5月前
|
C语言
leetcode:191. 位1的个数
leetcode:191. 位1的个数
24 0
|
5月前
leetcode-191:位1的个数
leetcode-191:位1的个数
41 0
【力扣每日一题:2-19】1004. 最大连续1的个数 III【中等】
【力扣每日一题:2-19】1004. 最大连续1的个数 III【中等】
|
11月前
|
算法
【LeetCode力扣】189 53 轮转数组 | 最大子数组和
【LeetCode力扣】189 53 轮转数组 | 最大子数组和
61 0