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];//防止溢出
        }
    }
};
posted @ 2022-06-28 02:31  失控D大白兔  阅读(29)  评论(0编辑  收藏  举报