Segregate 0s and 1s Problem in Java2025年5月6日 | 阅读4分钟 这是Google、Amazon、TCS、Accenture、Flipkart 等顶级 IT 公司面试中经常提出的问题。通过解决这个问题,可以考察面试者的逻辑能力、批判性思维和解决问题的技巧。因此,在本节中,我们将通过不同的方法和逻辑来解决分离 0 和 1 的问题。我们还将为此创建 Java 程序。 分离 0 和 1 的问题 简单地重新排列 0 和 1 的数组,使所有 0 出现在一侧(通常是左侧),所有 1 出现在另一侧。这个问题通常被认为是双指针技术的一种形式,并且是数组操作的基本问题。 这个问题对于理解基本的排序技术、处理 数组 中有限值以及实现具有最小时间复杂度的就地算法至关重要。 示例输入数组 {0, 1, 1, 0, 1, 0, 0, 1, 1, 0} 初始状态
第一次迭代
第二次迭代
第三次迭代
End
解决问题的方法
文件名:SegregateZerosAndOnes.java 输出 Original Array: 0 1 1 0 1 0 0 1 1 0 Array after segregation: 0 0 0 0 0 1 1 1 1 1 解释给定的 Java 程序使用双指针技术分离数组中的 0 和 1,确保了一种高效且就地(in-place)的解决方案。它初始化两个指针,left 指针指向数组的开头,right 指针指向数组的末尾。 left 指针向前移动,寻找 0,因为它们已处于正确的位置;right 指针向后移动,寻找 1。当 arr[left] 是 1 且 arr[right] 是 0 时,两个值都会被交换到正确的位置,并且两个指针都会向内移动。 此过程将一直持续到指针相遇,最终结果是所有 0 在左边,所有 1 在右边。这种方法保证了时间复杂度为 O(n)(这里原文写的是 O(1),但实际是 O(n)),空间复杂度为 O(1),使其对于二元数组非常高效。 双指针技术的优点
用例
复杂度分析1. 时间复杂度该算法对数组进行一次遍历,对每个元素进行常数时间的比较和交换。
2. 空间复杂度该算法完全在原地操作,不需要额外的内存。
3. 优化效率恒定的空间复杂度和线性时间复杂度使得该算法非常高效,尤其是在处理大型数组时。它避免了使用额外数据结构的开销,在内存受限的系统中提供了性能优势。 结论“分离 0 和 1”问题通过双指针技术演示了就地排序的力量。它有效地重新排列二进制数组,而无需额外的空间,确保所有 0 都位于左侧,所有 1 都位于右侧。 该方法简单而最优,适合初学者和高级程序员。通过最小化遍历和交换次数,它强调了优化算法时间复杂度和空间复杂度的重要性,尤其是在处理大型数据集时。 该解决方案非常健壮,可以作为解决更复杂的分离问题的基础。 下一主题Kruskal 算法 Java |
ZIP 是一种用于压缩文件或文件夹的文件格式。它能够实现数据压缩。使用 Java 编程语言,我们可以创建 ZIP 文件或文件夹。为此,Java 提供了相应的类。在 Java 中,ZipFile 类属于 java.util.zip 包。该包提供了...
阅读 2 分钟
在计算生物学中,经常需要找到 DNA 序列中的全局最小核苷酸,以及给定范围内的全局最小核苷酸。DNA 序列由四种核苷酸组成。由字母表示的四种碱基是腺嘌呤 (A)、胞嘧啶 (C)、鸟嘌呤...
阅读 6 分钟
在不断发展的技术格局中,自然语言处理 (NLP) 在弥合人类交流与计算机理解之间的差距方面发挥着至关重要的作用。Java 是一种通用且广泛使用的编程语言,它使开发人员能够通过各种库和框架来利用 NLP 的潜力……
阅读 3 分钟
Java 是一种广泛使用且多功能性的编程语言,以其健壮性和可靠性而闻名。然而,与任何软件一样,Java 应用程序并非不受错误和异常的影响。其中,未捕获的异常作为 Java 编程中开发人员必须理解和处理的关键方面而脱颖而出...
阅读 4 分钟
在 Java 中,有多种方法可以计算电费。我们可以使用静态值、命令行参数、方法和函数、用户定义方法以及 do-while 和 for 循环来计算电费。让我们一一了解它们:使用静态方法在这种情况下...
5 分钟阅读
广度优先搜索 (BFS) 是一种基本的搜索算法,用于遍历树或图。在 BFS 中,节点从给定的源节点按递增顺序进行遍历,其中一个给定级别上的所有节点都将在进入下一层之前进行探索……
5 分钟阅读
如果一个正整数没有重复的数字,那么它就是唯一的。换句话说,如果一个数字的各位数字不重复,那么它就是唯一的。例如,20、56、9863、145 等是...
阅读 4 分钟
在本节中,我们创建了几个 Java 程序来检查给定数字是否为完全平方数。完全平方数或平方数是整数的平方的正整数。换句话说,当我们乘以两个相同的数字时……
阅读 6 分钟
CharsetDecoder 类的函数 isDetected() 方法用于确定在使用启用自动检测的解码器时,给定输入的字符集是否已正确识别。默认使用此方法时,始终会引发 UnsupportedOperationException。自动检测解码器应覆盖它...
阅读 3 分钟
括号的最大嵌套深度概念在字符串解析和数学表达式求值中经常遇到。它指的是给定字符串中嵌套括号的最深级别。给定一个只包含 '(' 和 ')' 字符的字符串,我们的目标是确定...
阅读 10 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India