前言
持续更新了
正文
问题来源
本问题来自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。
总结:
勤思考。
结语
不管怎么样好好加油。