当前位置:   article > 正文

leetcode-324-摆动排序 II-java

摆动排序

题目及测试

  1. package pid324;
  2. /* 摆动排序 II
  3. 给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。
  4. 示例 1:
  5. 输入: nums = [1, 5, 1, 1, 6, 4]
  6. 输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6]
  7. 示例 2:
  8. 输入: nums = [1, 3, 2, 2, 3, 1]
  9. 输出: 一个可能的答案是 [2, 3, 1, 3, 1, 2]
  10. 说明:
  11. 你可以假设所有输入都会得到有效的结果。
  12. 进阶:
  13. 你能用 O(n) 时间复杂度和 / 或原地 O(1) 额外空间来实现吗?
  14. */
  15. public class main {
  16. public static void main(String[] args) {
  17. int[][] testTable = {
  18. {1, 5, 1, 1, 6, 4},{1, 3, 2, 2, 3, 1},{1,0,1,3,0,4,0,2,0,2},{0,6,2,7,0}};
  19. for (int[] ito : testTable) {
  20. test(ito);
  21. }
  22. }
  23. private static void test(int[] ito) {
  24. Solution solution = new Solution();
  25. long begin = System.currentTimeMillis();
  26. for (int i = 0; i < ito.length; i++) {
  27. System.out.print(ito[i]+" ");
  28. }
  29. System.out.println();
  30. //开始时打印数组
  31. solution.wiggleSort(ito);//执行程序
  32. long end = System.currentTimeMillis();
  33. //System.out.println(ito + ": rtn=" + rtn);
  34. System.out.println("rtn=" );
  35. for (int i = 0; i < ito.length; i++) {
  36. System.out.print(ito[i]+" ");
  37. }//打印结果几数组
  38. System.out.println();
  39. System.out.println("耗时:" + (end - begin) + "ms");
  40. System.out.println("-------------------");
  41. }
  42. }

没想出来

解法1(别人的)

有一个数组[a1,a2,...,an],我们怎么把它排成摇摆序列呢?

由摇摆序列的定义:nums[0] < nums[1] > nums[2] < nums[3]...,我们知道了可以分成较大一部分的数和较小一部分数,然后互相穿插即可。比如一个数组排序后为:A=[a1,a2,...,an] (a1<=a2<=....<=an),然后分成较小和较大的两部分[a1,a2,...,a(n/2)],[a(n/2+1),...,an](数组长度为奇数时不影响),再进行穿插操作。
那是不是穿插成[a1,a(n/2+1),a2,a(n/2+2),...,an]就行了呢?

其实不对,可以验证特殊情况:n比较小时且为偶数时,穿插后的序列需要满足a(n/2+1)>a2,如果a1<a2<=a(n/2+1)<an,a(n/2+1)正好是a2的后一项且与a2相等呢?即如果是[4,5,5,6]的情况呢?
那就分成了[4,5],[5,6]两部分,之后穿插成的是[4,5,5,6]并不是摇摆序列。
应该怎样排列呢?

为了方便阅读,我们在下文中定义较小的子数组为数组A,较大的子数组为数组B。显然,出现上述现象是因为nums中存在重

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/946459
推荐阅读
相关标签
  

闽ICP备14008679号