Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] <= nums[3]....

Example:

Input: nums = [3,5,2,1,6,4]
Output: One possible answer is [3,5,1,6,2,4]

摆动排序。题意是给一个数组,请按照如下的方式重新排序。

思路很简单,就是按照规则比较数字之间的大小关系。规则是如果当前index是奇数,那么这个位置上的数字要大于等于他前面一个位置上的数字;如果当前index是偶数,那么这个位置上的数字要小于等于他前面一个位置上的数字。对于不满足条件的情况,只需要做相对应的swap即可。

时间O(n)

空间O(1)

JavaScript实现

 1 /**
 2  * @param {number[]} nums
 3  * @return {void} Do not return anything, modify nums in-place instead.
 4  */
 5 var wiggleSort = function (nums) {
 6     for (let i = 1; i < nums.length; i++) {
 7         if ((i % 2 === 1 && nums[i] < nums[i - 1]) || (i % 2 === 0 && nums[i] > nums[i - 1])) {
 8             let temp = nums[i - 1];
 9             nums[i - 1] = nums[i];
10             nums[i] = temp;
11         }
12     }
13 };

 

Java实现

 1 class Solution {
 2     public void wiggleSort(int[] nums) {
 3         for (int i = 1; i < nums.length; i++) {
 4             if ((i % 2 == 1 && nums[i] < nums[i - 1]) || (i % 2 == 0 && nums[i] > nums[i - 1])) {
 5                 int temp = nums[i - 1];
 6                 nums[i - 1] = nums[i];
 7                 nums[i] = temp;
 8             }
 9         }
10     }
11 }

 

LeetCode 题目总结