• lilntcode-508-摆动排序


    508-摆动排序

    给你一个没有排序的数组,请将原数组就地重新排列满足如下性质
    nums[0] <= nums[1] >= nums[2] <= nums[3]....

    注意事项

    请就地排序数组,也就是不需要额外数组

    样例

    给出数组为 nums = [3, 5, 2, 1, 6, 4] 一种输出方案为 [1, 6, 2, 5, 3, 4]

    标签

    排序 快速排序 数组 谷歌

    方法一(快排 + 交换,时间复杂度O(nlgn))

    先将数组排序,然后交换第2位和第3位,第3位和第4位...

    code

    class Solution {
    public:
        /**
         * @param nums a list of integer
         * @return void
         */  
        void wiggleSort(vector<int>& nums) {
            // Write your code here
            int size = nums.size();
            if (size <= 0) {
                return;
            }
            sort(nums.begin(), nums.end());
    
            for (int i = 1; i < size - 1; i += 2) {
                swap(nums[i], nums[i + 1]);
            }
        }
    };
    

    方法二(找规律 + 交换,时间复杂度O(n))

    • 当i为奇数时,nums[i] >= nums[i - 1]
    • 当i为偶数时,nums[i] <= nums[i - 1]
    • 那么只要对每个数字,根据其奇偶性,选择是否与上一个数交换即可

    code

    class Solution {
    public:
        /**
         * @param nums a list of integer
         * @return void
         */  
        void wiggleSort(vector<int>& nums) {
            // Write your code here
            int size = nums.size();
            if (size <= 0) {
                return;
            }
    
            for (int i = 1; i < size; i += 2) {
                if ((i % 2 == 1 && nums[i] < nums[i - 1]) || (i % 2 == 0 && nums[i] > nums[i - 1])) {
                    swap(nums[i], nums[i - 1]);
                }
            }
        }
    };
    
  • 相关阅读:
    后海日记(6)
    后海日记(6)
    后海日记(5)
    后海日记(5)
    TCP 连接的握手信息详解
    TCP 连接的握手信息详解
    java枚举类型的优势在哪里?--一个实例
    java枚举类型的优势在哪里?--一个实例
    网络基础之网络协议篇
    mysql之innodb引擎的共享表空间和独立表空间
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7417749.html
Copyright © 2020-2023  润新知