zoukankan      html  css  js  c++  java
  • Wiggle Sort I && II

    题目大意:

    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].

    分析:

    就是要求将一个数组排列成一个摇摆排序,其实通过简单的交换就可以实现(注意这里题目条件当中nums[0] <= nums[1],如果没有这个条件,是没有办法通过交换实现的)

    具体思路看代码好了,如下:

    class Solution {
    public:
        void wiggleSort(vector<int>& nums) {
            int n = nums.size();
    
            for(int i=1; i<n; ++i)
            {
                if((i % 2== 1 && nums[i] < nums[i-1])
                        || (i % 2 == 0 && nums[i] > nums[i-1]))
                {
                    swap(nums[i], nums[i-1]);
                }
            }
        }
    private:
        void swap(int &a, int &b)
        {
            int temp = a;
            a = b;
            b = temp;
        }
    };

    上述代码时间复杂度为O(n),空间复杂度为O(1)

    II是对I的延伸,题目链接:https://leetcode.com/problems/wiggle-sort-ii/

    解题思路:(暂时还没有想到好的解决方法)

  • 相关阅读:
    msp430时钟小结
    JDBC第一天连接池案例
    maltab几个常见的问题
    qt 获取天气的接口
    Qt Style Sheets制作UI特效
    qt 在指定区域添加图片
    qt 设置背景图片
    linux下mysql数据库的学习
    qt文本编辑器
    C++小游戏:扑克牌21点
  • 原文地址:https://www.cnblogs.com/shirley-ict/p/5601915.html
Copyright © 2011-2022 走看看