【力扣】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)。


相关文章
|
7月前
剑指Offer LeetCode 面试题40. 最小的k个数
剑指Offer LeetCode 面试题40. 最小的k个数
39 0
|
7月前
|
Java
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
【LeetCode力扣】面试题 17.14. 最小K个数(top-k问题)
96 1
|
5月前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
36 0
|
7月前
【力扣】485.最大连续 1 的个数
【力扣】485.最大连续 1 的个数
|
7月前
|
C语言
leetcode:191. 位1的个数
leetcode:191. 位1的个数
28 0
|
7月前
leetcode-191:位1的个数
leetcode-191:位1的个数
47 0
|
7月前
leetcode-1610:可见点的最大数目
leetcode-1610:可见点的最大数目
38 0
【LeetCode 327】区间和的个数
【LeetCode 327】区间和的个数
113 0
【每日一道LeetCode】——191. 位1的个数
【每日一道LeetCode】——191. 位1的个数
【每日一道LeetCode】——191. 位1的个数

热门文章

最新文章