leetcode324摆动排序II

leetcode 324 Wiggle Sort II

Posted by BY on June 23, 2020

前言

持续更新了

正文

问题来源

本问题来自leetcode上的324题。

问题描述

给定一个无序的数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。

示例 1:

输入: nums = [1, 5, 1, 1, 6, 4]
输出: 一个可能的答案是 [1, 4, 1, 5, 1, 6]

示例 2:

输入: nums = [1, 3, 2, 2, 3, 1]
输出: 一个可能的答案是 [2, 3, 1, 3, 1, 2]

分析:

只会暴力,只有去借鉴一个…

class Solution {
public:
    void wiggleSort(vector<int>& nums) {
        nth_element(nums.begin(), nums.begin()+nums.size()/2, nums.end());
        int len=nums.size(), low=0, high=len-1, mid =nums[len/2], i=0;
        auto index = [=](int pos){ return (1+pos*2)%(len|1); };//Lambda表达式
        while(i <= high)
        {
            if(nums[index(i)] > mid) swap(nums[index(i++)], nums[index(low++)]);
            else if(nums[index(i)]<mid) swap(nums[index(i)],nums[index(high--)]);
            else i++;
        }
    }
};

nth_element函数第二个参数可以看做该位置的指针(前面位置值的都小于这个值,后面位置的都大于这个值)
Lambda表达式的意思,假设有6个空间的数组,数组下标0,1,2,3,4,5经过表达式转化后为1,3,5,0,2,4;假设有5个空间的数组1,3,0,2,4。

总结:

勤思考。

结语

不管怎么样好好加油。