zoukankan      html  css  js  c++  java
  • 下一个排列(leetcode31)

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

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

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

    示例 1:

    输入:nums = [1,2,3]
    输出:[1,3,2]

    解析:

    两遍扫描

    从后往前扫描,当满足a [ i ] > a [ i+1 ]  时,字典序最大的,无法再增大。

    所以,当找到第一个满足 a [ i ] < a [ i+1 ] 时,此时的 i 的位置就是可以让字典序变大的位置。

    而要让字典序的增大尽可能小,

    则需要从后往前扫描,找到尽量靠右的比 i 大的 j 的位置。而这时候, i 位置的右边也是有序的。即i位置右边都满足 a[i] > a[i+1].

    交换 i 和 j 位置的值,并且把 i 位置右边的区域反转。

    例如,

    4 5 2 6 3 1 

    按上面思路用笔画出来。

     结果是:

    4 5 3 1 2 6

    代码如下:

    public class leetcode31 {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            int[] nums = new int[]{1,2,3};
            nextPermutation(nums);
            for(int i:nums){
                System.out.print(i+" ");
            }
        }
    
        
        public static void nextPermutation(int[] nums) {
    
            int i = nums.length-2;
            while(i>=0&&nums[i]>=nums[i+1]){
                i--;
            }
            if(i>=0){
                int j = nums.length-1;
                while(j>=0 && nums[i]>=nums[j]){
                    j--;
                }
                swap(nums,i,j);
            }
            reverse(nums,i+1);
        }
        
        public static void  swap(int[] nums,int i,int j){
            int temp = nums[i];
            nums[i] = nums[j];
            nums[j] = temp;
        }
        
        public static void reverse(int[] nums,int start){
            int left = start,right = nums.length-1;
            while(left<right){
                swap(nums,left,right);
                left++;
                right--;
            }
        }
        
    }
  • 相关阅读:
    ABAP接口用法
    监听textarea数值变化
    The first step in solving any problem is recognizing there is one.
    Wrinkles should merely indicate where smiles have been.
    God made relatives.Thank God we can choose our friends.
    Home is where your heart is
    ABAP跳转屏幕
    Python 工具包 werkzeug 初探
    atom通过remote ftp同步本地文件到远程主机的方法
    Mongodb学习笔记一
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/14568064.html
Copyright © 2011-2022 走看看