leetcode-324


题面

image-20201122204902512

原题:https://leetcode-cn.com/problems/wiggle-sort-ii/submissions/

思路:

  1. 排序
  2. 取出前半段的最后一个数,再取出后半段的最后一个
  3. 取出前半段的倒数第二个数,再取出后半段的倒数第二个
  4. 以此类推

重点:

  1. 分段时,数组长度为n,中位下标为mid,必须使用mid = (n+1)/2,它能保证:

    • n为偶数时,mid(n)/2结果相同
    • n为奇数时,mid等于(n)/2的结果加1
    • n为奇数时,遍历下标,偶数下标=奇数下标+1,如果mid(n)/2,那么遍历前半段时,会出现下标为-1的情况。所以mid需要为(n)/2+1
  2. 为什么不能是取出前半段的第一个数,再取出后半段的第一个数?

    这种做法

    可以保证:

    第1个数<第2个数

    但无法保证

    第2个数>第3个数

    例如输入为{4,5,5,6}

代码:

class Solution
{
public:
    void wiggleSort(vector& nums)
    {
        int len=0;
        len = nums.size();
        int a[len];
        int b[len];
        for(int i=0; i