您的位置:首页 > 其它

lintcode: Wiggle Sort Show result

2016-03-12 22:58 429 查看


Wiggle
Sort
Show result

30:00
Start

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


Have you met this question in a real interview?

Yes


Notice


Please complete the problem in-place.

Example
Tags
Related
Problems
Notes

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

class Solution {

private:
void swap(vector<int>& nums, int i, int j)
{
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}

public:
/**
* @param nums a list of integer
* @return void
*/
void wiggleSort(vector<int>& nums) {
// Write your code here

if (nums.size() == 0)
return;
/*
sort(nums.begin(), nums.end());

int len = nums.size();
int pivot = 0;
int loop  = 0;

if (len % 2)
{
pivot = len/2+1;
loop  = len/2;
}
else
{
pivot = len/2;
loop  = len/2-1;
}

for (int i=0; i<loop; i++)
{
int curIdx = pivot+i;
for (int j=0; j<loop-i; j++)
{
swap(nums, curIdx, curIdx-1);
curIdx--;
}
}
*/
//主要思想是,当前小的数往前一个偶数位推;当前大的数往前一个奇数位推
for(int i = 1; i < nums.size(); i++) {
// 需要交换的情况:
//奇数时nums[i] < nums[i - 1]或偶数时nums[i] > nums[i - 1]
if((i % 2 == 1 && nums[i] < nums[i-1]) || (i % 2 == 0 && nums[i] > nums[i-1])){
int tmp = nums[i-1];
nums[i-1] = nums[i];
nums[i] = tmp;
}
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: