zoukankan      html  css  js  c++  java
  • lintcode-507-摆动排序 II

    507-摆动排序 II

    给你一个数组nums,将它重排列如下形式
    nums[0] < nums[1] > nums[2] < nums[3]....

    注意事项

    你可以认为每个输入都有合法解

    样例

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

    挑战

    O(N)时间复杂度 O(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;
            }
            vector<int> temp = nums;
            int k = (size + 1) / 2, j = size;
            sort(temp.begin(), temp.end());
            for (int i = 0; i < size; ++i) {
                nums[i] = i & 1 ? temp[--j] : temp[--k];
            }
        }
    };
    
  • 相关阅读:
    Linux文件权限管理
    Linux用户权限管理
    压缩,解压缩 和tar详细介绍
    grep基本详细使用
    Vim文本编辑器详细用法
    Linux命令查找文件目录
    Linux文件增删改
    Linux目录管理
    Linux修改主机名
    Linux创建高级用户并删除
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7422426.html
Copyright © 2011-2022 走看看