您的位置:首页 > 其它

Wiggle Sort I && II

2016-06-20 21:33 288 查看
题目大意:

Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] <= nums[3]....

For example, given
nums = [3, 5, 2, 1, 6, 4]
, one possible answer is
[1, 6, 2, 5, 3, 4]
.

分析:

就是要求将一个数组排列成一个摇摆排序,其实通过简单的交换就可以实现(注意这里题目条件当中nums[0] <= nums[1],如果没有这个条件,是没有办法通过交换实现的)

具体思路看代码好了,如下:

class Solution {
public:
void wiggleSort(vector<int>& nums) {
int n = nums.size();

for(int i=1; i<n; ++i)
{
if((i % 2== 1 && nums[i] < nums[i-1])
|| (i % 2 == 0 && nums[i] > nums[i-1]))
{
swap(nums[i], nums[i-1]);
}
}
}
private:
void swap(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
};


上述代码时间复杂度为O(n),空间复杂度为O(1)

II是对I的延伸,题目链接:https://leetcode.com/problems/wiggle-sort-ii/

解题思路:(暂时还没有想到好的解决方法)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: