zoukankan      html  css  js  c++  java
  • LeetCode 11.10每日一题 31. 下一个排列【中等】

    原题地址:https://leetcode-cn.com/problems/next-permutation/comments/

    思路:

    1、找到第一个左边比右边小的数 。如:1243,为2

    2、该数右边找比它大的最小数,交换他们。3是最小的比2大的数,交换2和3,变为1342

    3、该数右边升序排列。1324

    /**
     * @param {number[]} nums
     * @return {void} Do not return anything, modify nums in-place instead.
     */
    var nextPermutation = function(nums) {
        var n=nums.length-1;
        var i=n;
        while(i>=1){
            if(nums[i]>nums[i-1]){//找到右边的比左边的大的数 如:1243 此时i指向4,i-1指向2
                var j=i;
                var minj=nums[i];
                var res=i;
                while(j<=n){//找右边比2大的最小数,3
                    if(nums[j]>nums[i-1]){
                        if(nums[j]<minj){
                            minj=nums[j];
                            res=j;
                        }
                    }
                    j++;
                }
                [nums[i-1], nums[res]] = [nums[res], nums[i-1]]; // 交换2和3 为1342
                var k = nums.length - 1;
                while(i<=n){//i后面的数排序 只能原地修改
                    j=i+1;
                    while(j<=n){
                        if(nums[i]>nums[j]){
                            [nums[i], nums[j]] = [nums[j], nums[i]]; 
                        }
                        j++;
                    }
                    i++
                }
                return nums;
            }
            else{
                if(i==1){//找不大更大的,则返回最小的
                    return nums.sort((a,b)=>{return a-b});
                }
            }
            i--;
        }
    };

  • 相关阅读:
    spin_count
    not in改写关联无需考虑重复数据
    substr函数
    Flex样式-ToolTip篇
    Flex样式-ProgressBar篇
    Flex样式-MenuBar篇
    Flex样式-DataGrid篇
    Flex样式-ColorPicker篇
    FireBug之Console命令大全
    Flex样式-VSlider篇
  • 原文地址:https://www.cnblogs.com/liangtao999/p/13969564.html
Copyright © 2011-2022 走看看