Count Total Set Bits in First Natural Numbers in Java2025年5月5日 | 阅读 4 分钟 问题陈述任务是计算第一个自然数 (n) 的二进制表示中设置的位数(或 1)的总数。二进制表示是数字系统的基石。并且理解设置的位数对于故障检测、密码学和机器设计等应用至关重要。 二进制数中的设置位是数字 1。例如:
如果 (n = 5),我们计算从 (1) 到 (5) 的数字的位数组合:( 1 (1), 1 (10), 2 (11), 1 (100), 2 (101) ),结果是( 1 + 1 + 2 + 1 + 2 = 7 ) 解决问题的方法1. 朴素方法最直接的方法是迭代从 (1) 到 (n) 的所有数字,并使用按位运算为每个数字计算设置的位数。 复杂度分析朴素方法迭代从 (1) 到 (n) 的每个数字,并使用 Integer.bitCount() 方法为每个数字计算设置的位数。以下是详细介绍: 1. 计算每个数字的设置位数
2. 总迭代次数
因此,时间复杂度为:[O(n * log(n))] 空间复杂度
2. 优化方法这涉及到利用二进制系统的模式来计算设置的位数,而无需迭代每个数字。二进制数字在位位置上遵循重复模式,并且数学技巧可以显著加快计算速度。 文件名:CountSetBits.java 输出 Naive Approach Total Set Bits: 25 Optimized Approach Total Set Bits: 25 解释 该代码使用两种方法计算前 (n) 个自然数的二进制表示中设置的总位数:朴素方法和优化方法。朴素方法迭代从 (1) 到 (n) 的每个数字,使用 Integer.bitCount() 为每个数字计算设置的位数,然后将它们相加,时间复杂度为 (O(n * log(n)))。 优化方法的时间复杂度为 (O(log(n))),它使用按位运算和递归来通过利用二进制数字中的模式来高效地计算设置的位数。它识别小于或等于 (n) 的最大 2 的幂((2^x)),计算到 (2^x - 1) 的所有数字中的设置位数,加上从 (2^x) 到 (n) 的数字中的设置位数,并递归处理剩余部分((n - 2^x))。基本情况确保在 (n = 0) 时递归终止。 复杂度分析优化方法优化方法避免了对所有数字进行迭代。相反,它利用二进制表示中的模式并递归计算总设置位数。详细分解如下: 1. 位模式
2. 递归调用
因此,时间复杂度为:[O(log(n))] 空间复杂度
结论计算总设置位数的任务突显了二进制算术和按位运算在有效解决现实世界问题中的效用。掌握这些技术可以为程序员提供优雅且高效地处理各种计算挑战的能力。 下一个主题Java 中的弹跳数 |
丑数是 Java 中另一种特殊的正数。如果一个数字只有 2、3 或 5 个素数因子,并且按照惯例 1 也被包含在内,则该数字称为丑数。让我们以丑数为例。27 不是丑数,因为...
阅读 8 分钟
? File: RemoveChar .java public class RemoveChar { public static void main(String[] args) { String str = "India is my country"; System.out.println(charRemoveAt(str, 7)); } public static String charRemoveAt(String str, int p) { ...
阅读1分钟
Java 泛型引入了参数化类型的概念,这彻底改变了程序员创建 Java 代码的方式。因此,编程进入了一个新的时代,Java 代码更短、更具适应性、类型安全。为了实现这些优势,许多设计模式都利用 Java...
阅读 10 分钟
Java 库中已有的异常被称为内置异常。这些异常可以定义错误情况,以便我们理解出现此错误的原因。内置异常的类型内置异常有两种:检查异常和非检查异常。检查异常 检查...
阅读 8 分钟
Go 和 Java 都是被全球大量开发人员使用的语言。由于这两种语言都提供服务器端编程的功能,因此选择其中一种可能是一项艰巨的任务。在本节中,我们讨论了它们之间的主要区别...
阅读 3 分钟
当且仅当两个双缓冲区的元素类型相同,剩余元素数量相等,并且当考虑它们来自何处时,两个元素序列逐点等效时,它们才相等。……
阅读 4 分钟
为了在 Java 中读取和写入 JSON 数据,我们使用 org.json 库。org.json 库允许我们在 Java 中编码和解码 JSON 数据。org.json 类提供了几个重要类,通过这些类我们可以对其 JSON 数据执行多项操作。这些...
阅读 3 分钟
在本节中,我们将学习什么是跳跃数,并创建 Java 程序来检查给定的数字是否为跳跃数。跳跃数程序经常在 Java 编码测试和学术中被问到。跳跃数 一个数字 N 被称为跳跃数...
7 分钟阅读
分区相等子集和问题是算法中的一个重要问题,并且经常出现在算法面试中。此类问题中最简单的问题是判断一组正整数是否可以分成两个总和相等的组。该问题...
5 分钟阅读
在本节中,我们将创建一个 Java 程序来显示从 1 到 100 的奇数。要学习 Java 奇数程序,您必须具备 Java for 循环和 if 语句的基本知识。我们可以使用不同的 Java 循环来显示奇数:使用...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India