題目來源
這道題的解法暴备,我看了老半天朦蕴,然后還是有點懵逼,先找中位數(shù)刊愚,然后比中位數(shù)大的和比中位數(shù)小的劃分為兩塊,交換位置踩验。
代碼如下:
class Solution {
public:
void wiggleSort(vector<int>& nums) {
int n = nums.size();
auto midptr = nums.begin() + n / 2;
nth_element(nums.begin(), midptr, nums.end());
int mid = *midptr;
#define A(i) nums[(1 + 2 * i) % (n | 1)]
int i = 0, j = 0, k = n - 1;
while (j <= k) {
if (A(j) > mid)
swap(A(i++), A(j++));
else if (A(j) < mid)
swap(A(j), A(k--));
else
j++;
}
}
};