• LeetCode 31. 下一个排列


    题目

    实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

    如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

    必须原地修改,只允许使用额外常数空间。

    以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
    1,2,3 → 1,3,2
    3,2,1 → 1,2,3
    1,1,5 → 1,5,1

    解析

    2431为例。
    1.从后往前找到最长的非增序列非增序列的前一个元素记为last)
    2.将非增序列进行排序
    3.交换last与非增序列中刚好大于他的那个数值(由于已经排序了,因此从头到尾遍历一下就可以找到这个数值)

    代码

    class Solution {
    public:
        void nextPermutation(vector<int>& nums) {
            // find the last
            int last = nums.size() - 1;
            while(last && nums[last - 1] >= nums[last]){
                last--;
            }
            // sort the sub-array
            sort(nums.begin() + last, nums.end());
            if(last == 0)   return ;
            // swap  
            for(int i = last; i < nums.size(); i++){
                if(nums[last-1] < nums[i]){
                    int t = nums[last-1];
                    nums[last-1] = nums[i];
                    nums[i] = t;
                    break;
                }
            }
        }
    };
    
  • 相关阅读:
    my first android test
    VVVVVVVVVV
    my first android test
    my first android test
    my first android test
    ini文件
    ZZZZ
    Standard Exception Classes in Python 1.5
    Python Module of the Week Python Module of the Week
    my first android test
  • 原文地址:https://www.cnblogs.com/woxiaosade/p/13466388.html
Copyright © 2020-2023  润新知