Java 中的摇摆排序2024年9月10日 | 阅读 6 分钟 给定一个包含 n 个整数的数组 arr[]。我们的任务是以这样的方式对数组进行排序,使其形成一个摆动序列。如果存在多个摆动序列,则打印其中任何一个。数组的摆动序列满足以下条件: arr[0] <= arr[1] >= arr[2] <= arr[3] >= arr[4] <= arr[5] … 示例:1 输入 int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9} 输出 {1, 6, 2, 7, 3, 8, 4, 9, 5} 解释:提到的序列形成了一个摆动序列。其他有效序列是:{5, 9, 1, 6, 3, 8, 2, 7, 4}, {2, 8, 3, 5, 4, 6, 1, 9, 7}, {1, 9, 2, 8, 3, 7, 4, 5}, and { 1, 3, 2, 5, 4, 7, 6, 9, 8} 示例:2 输入 int arr[] = {8, 12, 10, 11, 9} 输出 {8, 12, 9, 11, 10} 解释:提到的序列形成了一个摆动序列。其他有效序列是:{9, 11, 10, 12, 8}, {10, 12, 9, 11, 8}, and {8, 12, 10, 11, 9} 例如:3 输入 int arr[] = {-1, 0, 1, -2, -5} 输出 {-1, 0, -2, 1, -5} 解释:提到的序列形成了一个摆动序列。其他有效序列是:{0, 1, -5, -1, -2}, {-5, 0, -2, 1, -1}, {-5, 1, -2, 0, -1}, and { -1, 1, -2, 0, -5} 方法:使用排序当我们将较大的元素放在数组的奇数位置(即第一个、第三个、第五个位置等)时,而较小的元素放在偶数位置(即第 0 个、第 2 个、第 4 个位置等)时,就可以实现 arr[0] <= arr[1] >= arr[2] <= ar[3] >= arr[4] <= arr[5] ….. 这样的序列。现在任务是找出较小和较大的元素,这可以通过对元素进行排序来实现。排序后,左侧的元素是较小的元素,右侧的元素是较大的元素。现在,我们将使用两个指针,一个从排序后数组的最左侧开始,另一个指针从排序后数组的最右侧开始。通过循环,我们将递增和递减指针。在每次迭代中,我们将递增指向较小元素的指针一位,并递减指向较大元素的指针一位。 文件名: WiggleSort.java 输出 For the input Array: 1 2 3 4 5 6 7 8 9 The wiggle sequence is: 1 9 2 8 3 7 4 6 5 For the input Array: 8 12 10 11 9 The wiggle sequence is: 8 12 9 11 10 For the input Array: -1 0 1 -2 -5 The wiggle sequence is: -5 1 -2 0 -1 复杂度分析:由于进行了排序,因此程序的时间复杂度为 O(n x log(n))。此外,程序使用 ArrayList 来存储结果,因此程序的空间复杂度为 O(n),其中 n 是输入数组中存在的总元素数量。 如果我们仔细观察,就没有必要对数组进行排序。如果相邻的元素对不符合摆动序列,我们可以交换它们。这样,我们不仅避免了对输入数组进行排序,还避免了在之前的程序中使用额外的空间将结果存储在 ArrayList 中。下面的程序显示了这一点。 文件名: WiggleSort1.java 输出 For the input Array: 1 2 3 4 5 6 7 8 9 The wiggle sequence is: 1 3 2 5 4 7 6 9 8 For the input Array: 8 12 10 11 9 The wiggle sequence is: 8 12 10 11 9 For the input Array: -1 0 1 -2 -5 The wiggle sequence is: -1 1 -2 0 -5 复杂度分析:由于程序使用了 for 循环,因此程序的时间复杂度为 O(n),其中 n 是输入数组中存在的总元素数量。程序的空间复杂度是常数,即 O(1)。 下一个主题Java DOM |
每个人在处理编程时都会遇到错误。错误对开发人员来说很糟糕,因为很难处理。有些错误会导致困扰用户的故障。对于应用程序来说,两个最重要的考量是安全性和安全性。应用程序类型是什么并不重要...
阅读 4 分钟
JSON 是 JavaScript 对象表示法的缩写,它是一种轻量级的数据存储和传输格式。它以键值对的形式存储数据。大多数应用程序使用这种格式在服务器和网页之间传输数据,反之亦然。然而,我们...
阅读 2 分钟
在本节中,我们将学习什么是跳跃数,并创建 Java 程序来检查给定的数字是否为跳跃数。跳跃数程序经常在 Java 编码测试和学术中被问到。跳跃数 一个数字 N 被称为跳跃数...
7 分钟阅读
Java 编程语言使用的接口是 Java 命名和目录接口 (JNDI)。它是一个 API(应用程序编程接口),用于与服务器通信并使用命名约定从数据库获取文件。一个词或一个短语都可以...
阅读 6 分钟
在 Java 中,杂项运算符是那些未分组到算术、逻辑、按位、关系、一元、移位和三元运算符中的运算符。这些运算符通常用于专门目的,并可以简化某些编码模式。杂项运算符的类型:三元运算符 instanceof 运算符成员访问或点运算符 new 运算符类型转换运算符数组……
5 分钟阅读
Java.nio.DoubleBuffer 具有 compact() 函数。要压缩提供的缓冲区,请使用 DoubleBuffer 类。值从缓冲区的起始点和其限制转移到缓冲区。,n+1 被分配到缓冲区的插槽,并且其容量设置为...
阅读 3 分钟
Buzz number 是 Java 中的另一个特殊数字,它以数字 7 结尾或可被 7 整除。与素数和阿姆斯特朗数不同,Buzz number 不太流行,并且面试官不常问。简单来说,如果一个数字可以被 7 整除….
阅读 3 分钟
? 内存映射文件 当文件被映射到内存时,会创建一个 MappedByteBuffer,此时操作系统会将文件的内容加载到进程的虚拟内存中。借助内存映射文件,应用程序可以读写文件中的数据。缓冲区修改...
阅读 4 分钟
在开发软件应用程序时,尤其是命令行程序时,通常使用菜单驱动的方法,为用户提供与应用程序交互的清晰有组织的途径。Java 作为一种用途广泛且广泛使用的编程语言,为实现菜单驱动程序提供了完美的平台。在...
7 分钟阅读
在 Java 中,ArrayList 和 String 数组都用于存储一组对象。ArrayList 是一种用于存储对象组的数据结构,而字符串数组用于存储一组字符串值。有时我们需要...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India