Java 程序将所有零移到数组开头2025 年 1 月 7 日 | 阅读 3 分钟 在 Java 中将所有零移到数组开头可以通过多种方法实现。在这里,我们将探讨三种不同的方法:使用辅助数组、原地交换和双指针技术。每种方法都将通过完整的 Java 代码进行解释和说明。 方法 1:使用辅助数组此方法涉及创建一个额外的数组来分别存储零和非零元素。 文件名:MoveZerosToStart.java 输出 [0, 0, 0, 1, 2, 3, 4] 解释在辅助数组方法中,我们遍历数组三次。首先,我们计算零的数量并将它们放入新数组中。其次,我们将非零元素放入新数组中。 最后,我们将新数组复制回原始数组。尽管有这些多次遍历,但每次遍历都是线性的,因此总体时间复杂度为 O(n),其中 n 是数组的长度。这种方法很简单,但需要与数组大小成比例的额外空间。 方法 2:原地交换此方法通过原地将零交换到数组前面来最大程度地减少空间复杂度。 文件名:MoveZerosToStart.java 输出 [0, 0, 0, 1, 2, 3, 4] 解释在此方法中,我们遍历数组一次,在遇到零时将其交换到前面。这是通过维护一个用于放置零的索引,并在遇到零时将其与当前元素交换来实现的。 由于我们只遍历数组一次并执行常数时间交换,因此在最佳、最差和平均情况下,时间复杂度均为 O(n)。空间复杂度为 O(1),因为我们只使用几个额外的索引变量。 方法 3:双指针技术此方法使用两个指针有效地将零移到数组开头,而无需额外空间。 文件名:MoveZerosToStart.java 输出 [0, 0, 0, 1, 2, 3, 4] 解释在此方法中,我们使用两个从数组相反两端开始的指针。一个指针从左边移动以查找非零元素,另一个指针从右边移动以查找零。当在右边找到零,在左边找到非零元素时,它们将被交换。 这个过程会一直持续到指针相遇。每个元素最多被处理一次,因此在最佳、最差和平均情况下,时间复杂度均为 O(n)。由于只使用了几个额外的变量,因此空间复杂度为 O(1)。 结论所有三种方法在最佳、最差和平均情况下都表现出 O(n) 的线性时间复杂度。然而,辅助数组方法使用了与数组大小成比例的额外空间,而原地交换和双指针技术则以 O(1) 的常数空间复杂度运行。因此,原地交换和双指针技术通常在空间效率方面更优。 |
问题陈述 目标是使用两个数组 array1 和 array2 来确定 array1 是否是 array2 的子集。如果数组 array1 中的每个元素都在 array2 中,则 array1 是 array2 的子集。方法 1:使用蛮力方法 找出是否...
阅读 6 分钟
CAPTCHA(全自动区分计算机和人类的图灵测试)是一种广泛使用的安全机制,用于区分人类用户和自动化机器人。它通过扭曲的文本或图像形式向用户提出挑战,用户必须正确解读。在……
阅读 4 分钟
在本节中,我们将学习什么是十边形数,并创建计算十边形数的 Java 程序。十边形数程序经常在 Java 编码面试和学术界中被问到。十边形数:十边形数是形数,其递归定义为:D(n)...
5 分钟阅读
HashMap 和 TreeMap 的区别 Java HashMap 和 TreeMap 都是 Java 集合框架的类。Java Map 实现通常充当分桶哈希表。当存储桶过大时,它们会转换为 TreeNode 节点,其结构与 java.util.TreeMap 中的节点类似。HashMap HashMap……
阅读 3 分钟
Java.nio.DoubleBuffer 具有 compact() 函数。要压缩提供的缓冲区,请使用 DoubleBuffer 类。值从缓冲区的起始点和其限制转移到缓冲区。,n+1 被分配到缓冲区的插槽,并且其容量设置为...
阅读 3 分钟
在线编译器是一个基于云的 IDE,可帮助开发人员在线编译和执行 Java 程序,而无需在本地系统上安装 JDK。在本节中,我们将讨论一些流行的在线 Java 编译器,它们都是免费提供的。流行的在线...
阅读 6 分钟
在 Java 中将 Long 转换为 Date 在本文中,我们将学习 Java 中的 Long 和 Date 是什么,以及它们在 Java 编程语言中的实现。我们还将深入讨论如何将 Long 值转换为 Date 值...
阅读 8 分钟
Java 是一种多功能且广泛使用的编程语言,以其丰富的库和强大的功能而闻名。其中一项功能是 Icon 接口,它允许开发人员创建对象的动态图形表示。在本节中,我们将深入探讨 Java 中的 Icon 接口,...
5 分钟阅读
在 Java 中,有多种方法可以创建和访问文本文件。在处理大量应用程序时,执行此操作非常必要。Java 有多种读取纯文本文件的方法,例如 FileReader、BufferedReader 和 Scanner。每种实用程序都提供独特的功能;例如,…
阅读 4 分钟
分数背包问题是一个优化问题,在计算机科学和运筹学中广泛用于解决问题。然而,与 0/1 背包问题不同的是,物品不必是完整的,因为在这种情况下允许分割它们以获得最大...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India