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

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];
    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值