【LeetCode热题100(94/100)】下一个排列

题目地址: 链接

找规律:从数组末尾开始向左查找第一个无法构成逆序的位置。将该元素与后续数组中大于它的最小值交换,此时后续数组仍保持逆序状态,最后将这部分数组翻转即可完成排序(代码为sort排序)。

js 复制代码
/*
 * @lc app=leetcode.cn id=31 lang=typescript
 *
 * [31] 下一个排列
 */

// @lc code=start
/**
 Do not return anything, modify nums in-place instead.
 */
function nextPermutation(nums: number[]): void {
    const n = nums.length;
    for(let i = n - 1; i > 0; i --) {
        if(nums[i] > nums[i - 1]) {
            let [flag, flagIdx] = [Infinity, i];
            for(let j = i; j < n; j ++) {
                if(nums[j] > nums[i - 1] && nums[j] < flag) {
                    flagIdx = j;
                    flag = nums[j];
                }
            }

            // subArr是一个有序数组,可以直接反转数组弄成有序数组
            [nums[flagIdx], nums[i - 1]] = [nums[i - 1], nums[flagIdx]];
            let subArr = nums.slice(i, n).sort((a, b) => a - b);
            nums.splice(i, n - i, ...subArr);
            return
        }
    }
    for(let i = 0; i < (n >> 1); i ++) {
        [nums[i], nums[n - i - 1]] = [nums[n - i - 1], nums[i]]; 
    }
};

// @lc code=end
相关推荐
NAGNIP1 天前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试
NAGNIP1 天前
一文搞懂激活函数!
算法·面试
董董灿是个攻城狮1 天前
AI 视觉连载7:传统 CV 之高斯滤波实战
算法
爱理财的程序媛2 天前
openclaw 盯盘实践
算法
MobotStone2 天前
Google发布Nano Banana 2:更快更便宜,图片生成能力全面升级
算法
颜酱2 天前
队列练习系列:从基础到进阶的完整实现
javascript·后端·算法
用户5757303346242 天前
两数之和:从 JSON 对象到 Map,大厂面试官到底在考察什么?
算法
程序猿追2 天前
“马”上行动:手把手教你基于灵珠平台打造春节“全能数字管家”
算法
ZPC82103 天前
docker 镜像备份
人工智能·算法·fpga开发·机器人