算法编程(十五):位1的个数

简介: 算法编程(十五):位1的个数

写在前面


今天的这道题,《位1的个数》,是一个关于进制的题目。

要解出这道题,你需要具备对二进制的基本理解,并且能获取到每一位的二进制的数值。

下面就一起来看一下如何解答吧。

image.png

题目解读


从题目的标题来看,就大概知道要统计1出现的个数。

再从题目的描述来看,就知道是统计二进制数字的1出现的个数。

那么问题来了,要统计1出现的个数。

就必须拿到二进制每一位的值才行,这样才能进行有效的比对。

那么如何拿到每一位的值呢?

当然如果是十进制的话,可以使用取余10的方式来提取每一位的值。

但是二进制的肯定是不能取余10,那就取余2吧。

这里就要使用位运算了,通过这种方式拿到每一位的值后。

就可以进行判断统计了。

接下来就看一下代码实现吧。

代码实现


代码执行如下,大家可以自行参考一下。

public class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int total = 0;
        for (int i = 0; i < 32; i++) {
            if ((n & (1 << i)) != 0) {
                total++;
            }
        }
        return total;
    }
}

代码执行结果


本次代码执行的一般,内存消耗太严重,还是要考虑一下内存问题。

image.png

其他思路


还有一种更随便的方式,那就是直接使用Java提供的内置方法bitCount方法。代码如下:

public class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        return Integer.bitCount(n);
    }
}

执行结果:

竟然比上面的那种还要快,气不气!

image.png

总结


今天的总结就是搞清二进制,并且能熟练的提取二进制每一位的值即可解出此题。


相关文章
|
2月前
|
算法 数据安全/隐私保护
火山中文编程 -- MD5算法和SHA算法
火山中文编程 -- MD5算法和SHA算法
19 0
火山中文编程 -- MD5算法和SHA算法
|
4月前
|
算法 Java
算法编程(三十):交替合并字符串
算法编程(三十):交替合并字符串
47 0
|
4月前
|
算法
算法编程(二十八):重新排列单词间的空格
算法编程(二十八):重新排列单词间的空格
35 0
|
4月前
|
算法
算法编程(二十七):千位分隔数
算法编程(二十七):千位分隔数
40 0
算法编程(二十七):千位分隔数
|
4月前
|
存储 算法
算法编程(二十六):判断路径是否相交
算法编程(二十六):判断路径是否相交
29 0
|
4月前
|
算法
算法编程(二十五):检查单词是否为句中其他单词的前缀
算法编程(二十五):检查单词是否为句中其他单词的前缀
35 0
|
3月前
|
机器学习/深度学习 算法
机器学习 - [集成学习]Bagging算法的编程实现
机器学习 - [集成学习]Bagging算法的编程实现
32 1
|
2月前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
73 0
|
28天前
|
存储 算法 JavaScript
Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
解决这类问题时,建议采取下面的步骤: 理解数学原理:确保你懂得基本的数学公式和法则,这对于制定解决方案至关重要。 优化算法:了解时间复杂度和空间复杂度,并寻找优化的机会。特别注意避免不必要的重复计算。 代码实践:多编写实践代码,并确保你的代码是高效、清晰且稳健的。 错误检查和测试:要为你的代码编写测试案例,测试标准的、边缘情况以及异常输入。 进行复杂问题简化:面对复杂的问题时,先尝试简化问题,然后逐步分析和解决。 沟通和解释:在编写代码的时候清晰地沟通你的思路,不仅要写出正确的代码,还要能向面试官解释你的
33 0
|
1月前
|
存储 算法 JavaScript
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(二)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
28 0