描述
给你一个没有排序的数组,请将原数组就地重新排列满足如下性质
nums[0] <= nums[1] >= nums[2] <= nums[3]....
请就地排序数组,也就是不需要额外数组
您在真实的面试中是否遇到过这个题? 是
样例
给你一个没有排序的数组,请将原数组就地重新排列满足如下性质
nums[0] <= nums[1] >= nums[2] <= nums[3]....
请就地排序数组,也就是不需要额外数组
您在真实的面试中是否遇到过这个题? 是
样例
给出数组为 nums = [3, 5, 2, 1, 6, 4] 一种输出方案为 [1, 6, 2, 5, 3, 4]
分析
发现数的规律,先对数组排序[1,2,3,4,5,6],取后半段[4,5,6],从后半段的最后一位开始一次在前半段的间隔出插入数字。即可得输出方案。
程序
class Solution {
public:
/*
* @param nums: A list of integers
* @return: nothing
*/
void wiggleSort(vector<int> &nums) {
// write your code here
sort(nums.begin(), nums.end());
int index;//数组的截断部分
if(nums.size() % 2 == 0)//偶数
index = nums.size() / 2;
else
index = nums.size() / 2 + 1;
int len = nums.size() - index;
int k = 1;//插入的位置
while(len > 0){
nums.insert(nums.begin() + k, nums.back());
nums.pop_back();
len--;
k += 2;
}
}
};