leetcode-324
题面:

原题:https://leetcode-cn.com/problems/wiggle-sort-ii/submissions/
思路:
- 排序
- 取出前半段的最后一个数,再取出后半段的最后一个数
- 取出前半段的倒数第二个数,再取出后半段的倒数第二个数
- 以此类推
重点:
-
分段时,数组长度为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
-
为什么不能是取出前半段的第一个数,再取出后半段的第一个数?
这种做法
可以保证:
第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