Given an unsorted array Example 1: Input: Example 2: Input: Note: Follow Up: |
给定一个无序的数组 示例 1: 输入: 示例 2: 输入: 说明: 进阶: |
思路:是O(nlogn),先排序,然后l指向中间位置,r指向数组 最后位置。然后将第一个元素 置为l中间元素,然后l减一,然后放最后一个元素r,然后r-1,依次类推。就刚好满足题目 条件。比如,1,5,1,1,6,4, 排序后是1,1,1,4,5,6。l 指向第3个1,r指向6.。然后将数组逐个按规则往前排,为1,6,1,5,1,4
class Solution {
public:
void wiggleSort(vector<int>& nums) {
vector<int> tmp = nums;
int n=nums.size(), l=(n+1)/2 , r=n;
sort(tmp.begin(),tmp.end());
for(int i=0;i<n;++i)
nums[i] = i&1 ? tmp[--r]:tmp[--l];
}
};