您的位置:首页 > 其它

leetcode 324. Wiggle Sort II【如何锯齿状排序】

2017-05-31 10:31 429 查看
Wiggle Sort II

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.

这道题给了我们一个无序数组,让我们排成摆动数组,满足
nums[0]
< nums[1] > nums[2] < nums[3]...
。还举出例子。

首先应该对数组排序,然后再做调整。调整方法是找到数组中间的数,这样就把数组分成两段,从前一段末尾取一个数,从后一段末尾取一个数,一直这样取下去。这样取保证了第一个数小于第二个数,而第二个数大于第三个数

下面是C的写法

int cmp(const void *x,const void *y)
{return *(int *)x-*(int *)y;

}
void wiggleSort(int* nums, int numsSize) {
if(numsSize==0||nums==NULL)
return ;
qsort(nums,numsSize,sizeof(int),cmp);
int x=ceil(numsSize*1.0/2.0);
int *nums_1=(int *)malloc(sizeof(int)*numsSize);
int j=numsSize-1,k=0,i=x-1;
while(i>=0&&j>=x)
{     nums_1[k++]=nums[i--];
nums_1[k++]=nums[j--];
}
if(i==0)
{
nums_1[k++]=nums[i--];
}

for(i=0;i<numsSize;i++)
nums[i]=nums_1[i];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: