【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
相关推荐
2401_891482177 小时前
多平台UI框架C++开发
开发语言·c++·算法
88号技师7 小时前
2026年3月中科院一区SCI-贝塞尔曲线优化算法Bezier curve-based optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
t198751287 小时前
三维点云最小二乘拟合MATLAB程序
开发语言·算法·matlab
无敌昊哥战神7 小时前
【LeetCode 257】二叉树的所有路径(回溯法/深度优先遍历)- Python/C/C++详细题解
c语言·c++·python·leetcode·深度优先
x_xbx8 小时前
LeetCode:148. 排序链表
算法·leetcode·链表
Darkwanderor8 小时前
三分算法的简单应用
c++·算法·三分法·三分算法
2401_831920748 小时前
分布式系统安全通信
开发语言·c++·算法
WolfGang0073218 小时前
代码随想录算法训练营 Day17 | 二叉树 part07
算法
温九味闻醉8 小时前
关于腾讯广告算法大赛2025项目分析1 - dataset.py
人工智能·算法·机器学习
炽烈小老头8 小时前
【 每天学习一点算法 2026/03/23】数组中的第K个最大元素
学习·算法·排序算法