题目描述:
Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]….
Example:
(1) Given nums = [1, 5, 1, 1, 6, 4], one possible answer is [1, 4, 1, 5, 1, 6].
(2) Given nums = [1, 3, 2, 2, 3, 1], one possible answer is [2, 3, 1, 3, 1, 2].
Note:
You may assume all input has valid answer.
Follow Up:
Can you do it in O(n) time and/or in-place with O(1) extra space?
题目大意:
给定一个未排序数组,重新排列使得数组满足nums[0] < nums[1] > nums[2] < nums[3]….
测试用例如题目描述。
注意:
你可以假设所有输入都有可行解。
解题思路:
解法I O(nlogn)时间排序+O(n)空间辅助数组解法:
对原数组排序,得到排序后的辅助数组snums
第一次循环对原数组的奇数位下标填充snums的末尾元素
第二次循环对原数组的偶数位下标填充snums的末尾元素
相当于用数组中大的一半和小的一半隔开。
class Solution {
public:
void wiggleSort(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<int>snums = nums;
int j = nums.size()-1;
for (int i = 0; i < nums.size(); i++)
{
if(i%2 != 0)
nums[i] = snums[j--];
}
for (int i = 0; i < nums.size(); i++)
{
if(i%2 == 0)
nums[i] = snums[j--];
}
}
};