LeetCode/摆动排序
给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。
你可以假设所有输入数组都可以得到满足题目要求的结果。
1. 排序后穿插赋值
class Solution {
public:
void wiggleSort(vector<int>& nums) {
int n = nums.size();
vector<int> arr = nums;//需要使用辅助空间,这里无法直接映射
sort(arr.begin(), arr.end());//排序
int left = (n - 1) / 2;//left和right分别是两数组末位置
for (int i = 0 , right = n - 1; i < n; i += 2, left--, right--) {//两数组穿插赋值,从后往前
nums[i] = arr[left];//第一个值赋小的,同时可以赋奇数数组的最后一个数
if (i + 1 < n) nums[i + 1] = arr[right];//防止溢出
}
}
};