• 31. Next Permutation


    public class Solution {
        public void nextPermutation(int[] nums) {
            /*
                假设数组大小为 n
                1.从后往前,找到第一个 A[i-1] < A[i]的。也就是第一个排列中的  6那个位置,可以看到A[i]到A[n-1]这些都是单调递减序列。
                2.从 A[n-1]到A[i]中找到一个比A[i-1]大的值(也就是说在A[n-1]到A[i]的值中找到比A[i-1]大的集合中的最小的一个值)
                3.交换 这两个值,并且把A[n-1]到A[i+1]排序,从小到大。
            */
            int size=nums.length;
            
            if(nums==null||size==0||size==1)
                return ;
            int i=size-2;
            
            while(i>=0&&nums[i]>=nums[i+1])
                i--;
            if(i!=-1)
            {
                int j=i+1;
                while(j<size&&nums[j]>nums[i])
                    j++;
                j--;
                swap(nums,i,j);
            }
            reverse(nums,i+1,size-1);
            
        }
        public void reverse(int []nums,int i,int j)
        {
            while(i<j)
            {
                swap(nums,i,j);
                i++;
                j--;
            }
        }
        
        public void swap(int []nums,int i,int j)
        {
            int temp=nums[i];
            nums[i]=nums[j];
            nums[j]=temp;
        }
    }
  • 相关阅读:
    odoo邮箱系统
    运行odoo13,走的odoo12的数据库
    字段`in_group_69`不存在
    odoo库存
    Codeforces 1430E
    AtCoder "Regular Contest 102" D
    AtCoder "Grand Contest 041" E
    ZJNU 2471
    ZJNU 2455
    Codeforces 1426F
  • 原文地址:https://www.cnblogs.com/aguai1992/p/5764243.html
Copyright © 2020-2023  润新知