zoukankan      html  css  js  c++  java
  • leetcode31 下一个排列 字典序

    数字的字典序就是比大小

    先想几个例子  123_>132  1243-> 1324 ,12453-> 12534

    1.不可排的序列就是降序序列

    2.两个相同长度的串比大小,前面相同,比较第一个长度不同的字符,且越靠后越是比原来串大的小串

    因为降序已经不可再排,并且字符越靠后影响越小,于是找到降序序列左侧第一个数字(最靠后)A[i],因为要整体字典序变大就与降序序列中刚好比他大的数字交换

    此时得到的字典序比原来大,但是并不是最小的。重新排列A[i+1]--A[len-1],升序排列。这样得到比原来串大的最小串。

    于是

    1.倒着找到A[i]

    2.二分找到要交换的数字

    3.交换,重拍

    class Solution {
    public:
        void nextPermutation(vector<int>& nums) {
            if (nums.size() > 1) {
                int i;
                for (i = nums.size() - 2; i > 0 && nums[i] >= nums[i+1]; i--);
                
                if(i==0&&nums[i]>=nums[i+1]){
                    reverse(nums.begin(), nums.end());
                    return;
                }
                reverse(nums.begin() + i+1, nums.end());
                auto it = upper_bound(nums.begin() + i+1, nums.end(), nums[i]);
                swap(nums[i], *it);
            }
            return;
        }
    };
  • 相关阅读:
    YOLO V5
    YOLO系列(单阶段目标检测)
    优化算法
    算法总结
    图像分类算法
    ResNet网络(里程碑)
    GoogleNet网络(纵横交错)
    VGGNet网络(走向深度)
    AlexNet网络(开山之作)
    案例
  • 原文地址:https://www.cnblogs.com/lqerio/p/11785894.html
Copyright © 2011-2022 走看看