zoukankan      html  css  js  c++  java
  • [Locked] Wiggle Sort

    Wiggle Sort

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

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

    分析:

      序列单调性问题,本题要求在不开额外数组的情况下使得序列呈现增减增减的规律

    解法:

      遍历数组相邻对,遇到不符合要求的,调换位置

    证明:

      充分性,数学归纳法,之前的序列满足题目要求,当第k个对呈x规律,若第k+1个对呈y规律,满足要求;若第k+1个对呈x规律,调换位置,则呈y规律,满足要求;

      必要性,因为题目只要求给出一个可行解,所以无需具备必要性。

    代码:

    void wiggleSort(vector<int> &a) {
        bool inc = true;
        for(int i = 0; i < a.size() - 1; i++) {
            if((a[i + 1] < a[i] && inc) || (a[i + 1] > a[i] && !inc))
                swap(a[i], a[i + 1]);
            inc = !inc;
        }
        return;
    }

     

  • 相关阅读:
    Distributed System
    APP专项测试之兼容性测试
    面试如何正确谈薪?
    跳槽季,如何做好技术面试准备?
    Appium基础
    设置安装程序位置
    获取文件版本号
    28-PV&PVC
    Docker-文件拷贝
    Kubemark压测常用命令
  • 原文地址:https://www.cnblogs.com/littletail/p/5197895.html
Copyright © 2011-2022 走看看