假设我们有一个名为nums的未排序数组,我们必须就地重新排序,以使nums [0] <= nums [1]> = nums [2] <= nums [3] ....等。
因此,如果输入像nums = [3,5,2,1,6,4],那么输出将是[3,5,1,6,2,4],可能还有其他答案。
为了解决这个问题,我们将遵循以下步骤-
n:= nums的大小
对于初始化i:= 0,当i <n-1时,更新i:= i + 1,请执行-
swap(nums [i],nums [i + 1])
如果i为偶数且nums [i]> nums [i + 1]为true或i为奇数且nums [i]> nums [i + 1]为false,则
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto< v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: void wiggleSort(vector<int<& nums) { int n = nums.size(); for(int i = 0; i < n - 1; i+=1){ if((i % 2 == 0) == ( nums[i] > nums[i + 1])){ swap(nums[i], nums[i + 1]); } } } }; main(){ vector<int< v = {3,5,2,1,6,4}; Solution ob; ob.wiggleSort(v); print_vector(v); }
{3,5,2,1,6,4}
输出结果
[3, 5, 1, 6, 2, 4, ]