zoukankan      html  css  js  c++  java
  • 31. Next Permutation

    这题我记得一刷就卡过。二刷依然卡。。

    4321这样的话,说明没有下一个了,就返还1234.
    大多数情况是有下一个的,从右边开始找,找到第一个不是递增的地方,然后和右边遍历过的所有元素中,不小于他的最小元素交换。
    交换之后,找到位置右边的所有数字必须变成递增,SORT一下就可以。

    大概这么个思路,第一次做的时候这个规律墨迹了好久好久。。

    public class Solution 
    {
        public void nextPermutation(int[] nums) 
        {
            
            if(nums.length == 2)
            {
                int temp = nums[0];
                nums[0] = nums[1];
                nums[1] = temp;
                return;
            }
            
            
            for(int i = nums.length-2;i>=0;i--)
            {
                if(nums[i] < nums[i+1])
                {
    
                    
                    int min = i+1;
                    for(int j = i+1; j < nums.length;j++)
                    {
                        if(nums[j] > nums[i])
                        {
                            min = j;
                        }
                        else break;
                    }
                    
                    swap(nums,min,i);
                    Arrays.sort(nums,i+1,nums.length);
                    return;
                    
                }
            }
            
            Arrays.sort(nums);
            
            
        }
        
        public void swap(int[] nums, int a, int b)
        {
            int temp = nums[a];
            nums[a] = nums[b];
            nums[b] = temp;
        }
    }
    
  • 相关阅读:
    8.CNN应用于手写字识别
    8.优化器
    6.正则化
    5.Dropout
    4.交叉熵
    3.Minst数据集分类
    2.非线性回归
    1.线性回归
    110. Balanced Binary Tree
    106. Construct Binary Tree from Inorder and Postorder Traversal
  • 原文地址:https://www.cnblogs.com/reboot329/p/5971948.html
Copyright © 2011-2022 走看看