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 }