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

    一、题目

      1、审题

        

      2、分析

        给出一个数字型数组,改变其中的数字顺序,使得其为元素的所有数字组合后排序的下一个序列。

    二、解答

      1、思路:

        a、从后向前看,比较得到首个比后面紧挨着的数字小的第一个数,记录其下标 i ,

          若 i 为 0,即此时数字组合为最大值,只需翻转数组即可。

        b、查找下标 i 之后的比下标 i 的元素大的最小的数字下标 j ,交换位置 i 与 j 的元素;

        c、下标 i +1 开始的元素进行从小到大排序

    class Solution {
        public void nextPermutation(int[] nums) {
    
            int len = nums.length;
            int i = len - 1;
            for (; i > 0; i--) {
                if(nums[i-1] < nums[i])
                    break;
            }
    
            if(i == 0) {          // 该数为组成的最大值
                for (int j = 0; j < len / 2; j++) {
                    int tmp = nums[j];
                    nums[j] = nums[len - j - 1];
                    nums[len - j - 1] = tmp;
                }
            return;
            }
    
            int iMin = nums[i-1], iMax = nums[i];   // 找出比 i-1 大的最小的数下标 index
            int index = i;
            for (int j = i + 1; j <= len -1; j++) {
                if(nums[j] > iMin && nums[j] < iMax) {
                    iMax = nums[j];
                    index = j;
                }
            }
    
            int tmp = nums[i - 1];  // 交换 index 与 i-1 数
            nums[i - 1] = nums[index];
            nums[index] = tmp;
    
            // 排序, i 及 i之后数字从小到大排序
            for (int j = i; j < len - 1; j++) {
                int swapTmp = nums[j];
                index = j;
                for (int k = j + 1; k < len ; k++) {
                    if(swapTmp > nums[k]) {
                        swapTmp = nums[k];
                        index = k;
                    }
                }
                if( index != j) {
                    nums[index] = nums[j];
                    nums[j] = swapTmp;
                }
            }
    
        }
    }
  • 相关阅读:
    对象实例化过程分析
    对象实例化过程分析
    QuickHit游戏
    QuickHit游戏
    java继承向上转型和向下转型和动态绑定
    java继承向上转型和向下转型和动态绑定
    洛谷:P1095 守望者的逃离(贪心+dp)
    Manacher算法-最长回文子串
    numpy array()
    CNN 卷积神经网络结构
  • 原文地址:https://www.cnblogs.com/skillking/p/9439494.html
Copyright © 2011-2022 走看看