Wiggle Sort II

来源:互联网 发布:足球竞彩数据分析app 编辑:程序博客网 时间:2024/05/02 06:45

题目描述:
Given an unsorted array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]….

Example:
(1) Given nums = [1, 5, 1, 1, 6, 4], one possible answer is [1, 4, 1, 5, 1, 6].
(2) Given nums = [1, 3, 2, 2, 3, 1], one possible answer is [2, 3, 1, 3, 1, 2].

Note:
You may assume all input has valid answer.

Follow Up:
Can you do it in O(n) time and/or in-place with O(1) extra space?

题目大意:
给定一个未排序数组,重新排列使得数组满足nums[0] < nums[1] > nums[2] < nums[3]….

测试用例如题目描述。

注意:
你可以假设所有输入都有可行解。

解题思路:
解法I O(nlogn)时间排序+O(n)空间辅助数组解法:

对原数组排序,得到排序后的辅助数组snums

第一次循环对原数组的奇数位下标填充snums的末尾元素

第二次循环对原数组的偶数位下标填充snums的末尾元素

相当于用数组中大的一半和小的一半隔开。

class Solution {public:    void wiggleSort(vector<int>& nums) {        sort(nums.begin(),nums.end());        vector<int>snums = nums;        int j = nums.size()-1;        for (int i = 0; i < nums.size(); i++)        {            if(i%2 != 0)                nums[i] = snums[j--];        }        for (int i = 0; i < nums.size(); i++)        {            if(i%2 == 0)                nums[i] = snums[j--];        }    }};
0 0