下一个全排

 

class Solution {
public:
    //下一个排列的整数值大于上一个排列 1 3 7 4 1 -> 1 4 1 3 7
    //1 找到一个前一个数比后一个数小的位置peak 1 (3) 7 4 1
    //2 从后到前找一个比peak 大的数 change 1 (3) 7 (4) 1
    //3 交换 peak change  1 4 7 3 1
    //4 反转 peak到末尾  1 4 1 3 7
    void nextPermutation(vector& nums) {
        if(nums.size()==1)
            return ;
        int peak_pre = 0;
        for(int i=nums.size()-2;i>=0;i--)
        {
            if(nums[i]peak_pre;j--)
                {
                    if(nums[j] >nums[peak_pre])
                    {
                        swap(nums[j],nums[peak_pre]);
                        // cout<

参考https://zhangluncong.com/2018/04/27/nextPermutation/

你可能感兴趣的:(面试)