Leetcode 324.摆动排序II

摆动排序II

给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。

示例 1:

输入: nums = [1, 5, 1, 1, 6, 4]

输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6]

示例 2:

输入: nums = [1, 3, 2, 2, 3, 1]

输出: 一个可能的答案是 [2, 3, 1, 3, 1, 2]

说明:
你可以假设所有输入都会得到有效的结果。

进阶:
你能用 O(n) 时间复杂度和 / 或原地 O(1) 额外空间来实现吗?

 

先对nums排序,copy为nums的拷贝。
将copy的右半部分放入nums中以1开始, 间隔为2的位置
将copy的左半部分放入nums中以0开始, 间隔为2的位置
注意,两次操作都为逆序。否则,由于nums中间的元素相等会出错

 

 1 import java.util.Arrays;
 2 
 3 class Solution {
 4     public void wiggleSort(int[] nums) {
 5         Arrays.sort(nums);
 6         int[] copy = nums.clone();
 7         int index = 1;
 8         for (int i = nums.length - 1; i > (nums.length - 1) / 2; i--) {
 9             nums[index] = copy[i];
10             index += 2;
11         }
12         index = 0;
13         for (int i = (nums.length - 1) / 2; i >= 0; i--) {
14             nums[index] = copy[i];
15             index += 2;
16         }
17     }
18 }
原文地址:https://www.cnblogs.com/kexinxin/p/10235216.html