Java 中不相等的相邻元素2024年9月10日 | 阅读 9 分钟 给定一个包含 n 个(正数或负数)数字的数组 inArr。任务是返回重新排列元素的数组,使得没有两个相邻的元素相等。如果有多个有效的排列,则可以返回任何一个有效的排列。如果输入数组不包含任何有效的排列,则可以在控制台上显示适当的消息。 示例 1 输入 int inArr[] = {7, 7, 6, 8} 输出 {7, 6, 7, 8} 解释:有许多有效的排列是可能的。这些有效的排列如下所示:{7, 6, 7, 8}, {7, 6, 8, 7}, {7, 8, 7, 6}, {7, 8, 6, 7}, {8, 7, 6, 7}, {6, 7, 8, 7}。其中 {7, 6, 7, 8} 在输出中列出。 示例 2 输入 int inArr[] = {2, 4, 8, 9, 5, 7, 3, 6, 1} 输出 {2, 4, 8, 9, 5, 7, 3, 6, 1} 解释:输入数组的给出方式使得没有任何两个元素具有相同的值。因此,输入数组本身就是答案。 示例 3 输入 int arr[] = {3, 3, 3, 3, 3} 输出:不可能有有效的排列,其中相邻元素的值不同。 解释:所有元素的值都相同。因此,不可能有有效的排列。 方法:暴力法在此方法中,我们计算输入数组的所有排列。如果出现任何有效的排列,我们则返回该排列。如果没有有效的排列是可能的,则显示适当的消息。 为了计算有效的排列,首先,我们将数组按升序排序。然后,我们将找到已排序数组的下一个排列,并检查它是否是有效的排列。如果它是有效的排列,则我们可以返回该排列。如果不是,那么我们将找到下一个排列,并继续这样做,直到找到一个有效的排列或所有的排列都已用尽。如果排列都已用尽,那么我们可以说给定输入数组没有有效的排列,这在以下程序中有所说明。 文件名: UniqueAdjEle.java 输出 For the input array: 7 7 6 8 The valid arrangement is: 6 7 8 7 For the input array: 2 4 8 9 5 7 3 6 1 The valid arrangement is: 2 4 8 9 5 7 3 6 1 For the input array: 3 3 3 3 3 The valid arrangement is not possible. 复杂度分析:由于程序正在计算排列,因此程序的时间复杂度为 O(N!),其中 N 是链表中存在的元素总数。该程序使用常数空间;因此,程序空间复杂度为 O(1)。 上述程序不适用于较大的输入,因为程序的时间复杂度太高。因此,我们必须进行一些优化以降低时间复杂度。 方法:使用 Set这是一个贪心方法,其中我们首先放置出现次数最多的元素。使用集合,我们将所有元素按其出现次数的顺序放置。以下是计算答案的步骤。 步骤 1:声明一个空数组或列表 solAl。 步骤 2:对数组或列表 solAl 进行排序。 步骤 3:声明一个集合 st,用于存储元素及其出现次数。 步骤 4:遍历列表或数组 solAl
步骤 5:创建一个临时变量,用于存储前一个元素及其出现次数。 步骤 6:当集合 st 不为空时,执行以下操作:
步骤 7:最终,返回列表或数组 solAl。 实施上述步骤的实现如下。 文件名: UniqueAdjEle.java 输出 For the input array: 7 7 6 8 The valid arrangement is: 7 8 7 6 For the input array: 2 4 8 9 5 7 3 6 1 The valid arrangement is: 2 4 8 9 5 7 3 6 1 For the input array: 3 3 3 3 3 The valid arrangement is not possible. 复杂度分析:由于程序使用了排序,因此程序的时间复杂度为 O(N * log(N))。程序使用集合来存储元素及其出现次数。程序还使用了一个辅助数组 (arr)。因此,程序空间复杂度为 (N),其中 N 是输入数组中存在的元素总数。 注意:可以使用优先队列代替集合。在这种情况下,时间复杂度和空间复杂度也保持不变。下一个主题Java 并行流示例 |
Java 中的魔术数字 程序 在编程中,魔术数字是指直接在代码中使用的、未经明确定义或解释的硬编码数字或字符串值。它以后可能会更改。它用于标识目的。它似乎是任意的,没有上下文或...
7 分钟阅读
在 Java 中,我们可以轻松地将 JSON 文件转换为字符串。将 JSON 文件转换为字符串是通过读取该文件的字节数据来完成的。为了将 JSON 文件转换为字符串,我们使用 nio(非阻塞 I/O)包(Java 编程语言 API 的集合...)
阅读 3 分钟
缺少 return 语句错误是程序员经常遇到的一个常见问题,尤其是那些刚接触该语言或仍在学习其语法和规则的程序员。当方法被声明为返回特定类型的值,但方法...时,就会发生这种情况。
阅读 8 分钟
当实例变量的值未更改时,使用它不是一个好主意。此时,我们可以为该变量应用静态修改。每当我们声明变量为 static 时,就会在类级别生成一个单独的变量,并由所有...共享。
阅读 4 分钟
当我们谈论 Java 中的方法重载时,会出现一个问题:可以在 Java 中重载 main() 方法吗?答案是,可以。在本节中,我们将学习如何在 Java 中重载 main() 方法。...
阅读 3 分钟
java.nio.DoubleBuffer 有一个 limit() 函数。DoubleBuffer 类用于调整此 DoubleBuffer 的限制。此方法使用参数设置此缓冲区的新的限制,该参数是要设置的限制。这个新的限制没有被设置,并且...
阅读 3 分钟
在本节中,我们将学习什么是太阳数,以及如何创建一个 Java 程序来查找太阳数。我们还将创建一个 Java 程序来查找指定范围内的所有太阳数。太阳数 一个数称为太阳数...
阅读 3 分钟
在 Java 中,管理员和用户需要网络监控工具来对网络系统执行基本操作。网络监控工具有助于监控和分析网络流量,确保最佳性能和安全性。要使用 Java 中的内置库(如 java.net)创建一个简单的网络监控工具...
阅读 3 分钟
这是 Google、Amazon、TCS、Accenture 等顶级 IT 公司面试中经常遇到的问题。通过解决这个问题,人们想检查应试者的逻辑能力、批判性思维和解决问题的能力。因此,在本节中,我们将找出...
5 分钟阅读
与 Red-Black Tree 类似,AVL 树是 Java 中另一种自平衡 BST(二叉搜索树)。在 AVL 树中,所有节点的左右子树高度差不超过一。它需要 O(h) 时间来执行搜索、最大、最小…
阅读 6 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India