zoukankan      html  css  js  c++  java
  • 字典顺序下一个

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

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

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

    输入:nums = [1,2,3]
    输出:[1,3,2]
     
    /**
     * 从后往前找到第一个升序对(i,j)
     * 从j到最后找到最小的k>i,交换k和i
     * 从j到最后降序排列 
     */
     public static void nextPermutation(int[] nums) {
            int j=-1;
            
            for(int i=nums.length-1;i>0;i--){
                if(nums[i]>nums[i-1]){
                    j=i;
                    
                    break;
                }
            }
            
            if(j==-1){
                //已经是降序,整个倒置
                
                int l=0;
                int r=nums.length-1;
                if(nums.length%2!=0){
                    while(l!=r){
                        int temp=nums[r];
                        nums[r]=nums[l];
                        nums[l]=temp;
                        l++;
                        r--;
                    }
                }else{
                    while(l!=nums.length/2){
                        int temp=nums[r];
                        nums[r]=nums[l];
                        nums[l]=temp;
                        l++;
                        r--;
                    }
    
                }
            }else{
                //否则从j到最后找到最小的num[i]大的k,交换i和k,同时把j到最后降序排列
                int min=nums[j];
                int minI=j;
                for(int x=j;x<nums.length;x++){
                    if(nums[x]>nums[j-1]&&nums[x]<min){
                        min=nums[x];
                        minI=x;
                        
                    }
                }
                
                int temp=nums[j-1];
                nums[j-1]=nums[minI];
                nums[minI]=temp;
                
                Arrays.sort(nums, j, nums.length);
                
            }
            
        }
    

      

  • 相关阅读:
    RESTful风格的API
    案例:toDoList
    jQuery中的Ajax
    php 使用kafka
    crontab不执行
    php两种实现守护进程的方式
    crontab不执行脚本,手动调测又没有任何问题
    centos7 安装跳板机(堡垒机)
    Ubuntu修改默认键盘布局的方法
    openresty nginx升级版
  • 原文地址:https://www.cnblogs.com/jieyi/p/14050818.html
Copyright © 2011-2022 走看看