zoukankan      html  css  js  c++  java
  • LeetCode 31 Next Permutation(下一个全排列)

     
    Problem :寻找给定int数组的下一个全排列(要求:be in-place)
     
    倒序查找到该数组中第一个满足后面的数字大于前面的数字的下标i (当前下标 i 指向 后面的那个比较大的数)
     
     
    参考代码: 
    package leetcode_50;
    
    
    /***
     * 
     * @author pengfei_zheng
     * 下一个全排列
     */
    public class Solution31 {
        public static void nextPermutation(int[] nums) {
            int len = nums.length;
            if(len<=1)
                return;
            int i = len - 1;
            for(;i>=1;i--){//从后先前遍历
                    if(nums[i]>nums[i-1]){
                        //找到第一个后面的数字大于相邻的前面的那个数的下标 (此时下标指向较大的那个数字)
                        break;
                    }
            }
            if(i!=0){
                    swap(nums,i-1);//从后向前遍历,交换第一个大于index=i-1的那个数
            }
            reserver(nums,i);//将从下标i开始的数组进行从小到大的排序
        }
        private static void swap(int[] nums, int i) {
            for(int j=nums.length-1;j>i;j--){//从后向前遍历
                if(nums[j]>nums[i]){
                    int t = nums[j];
                    nums[j]=nums[i];
                    nums[i]=t;
                    break;//交换第一个比前面的index=i-1的那个数
                }
            }
        }
        //从下标i开始到nums.length-1结束,实现从小到大排列
        private static void reserver(int[] nums, int i) {
            int first = i;
            int last = nums.length-1;
            while(first<last){
                int t = nums[first];
                nums[first]=nums[last];
                nums[last]=t;
                first++;
                last--;
            }
        }
        public static void main(String[]args){
            //int []nums={6,3,4,9,8,7,1};
            int []nums={1,2,4,3};
            nextPermutation(nums);
            for(int n:nums){
                System.out.print(n+" ");
            }
        }
    }
  • 相关阅读:
    [转] css3变形属性transform
    [转] ReactJS之JSX语法
    [转] 那些在使用webpack时踩过的坑
    [转] jQuery的deferred对象详解
    [转] Webpack-CommonsChunkPlugin
    [转] 用webpack的CommonsChunkPlugin提取公共代码的3种方式
    Refs & DOM
    [转] Webpack的devtool和source maps
    [转] 编译输出文件的区别
    GDB && QString
  • 原文地址:https://www.cnblogs.com/zpfbuaa/p/6531728.html
Copyright © 2011-2022 走看看