【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
相关推荐
心运软件17 小时前
银行客户流失预测(Python 完整实战)
算法
邪神与厨二病17 小时前
牛客周赛 Round 153
python·算法
qizayaoshuap19 小时前
# ❌ 井字棋 — 鸿蒙ArkTS Minimax AI算法与博弈系统设计
人工智能·算法·华为·harmonyos
皓月斯语19 小时前
B3842 [GESP202306 三级] 春游 题解
数据结构·c++·算法·题解
atunet20 小时前
树状结构在查询优化中的作用与实现细节7
算法
徐凤年_20 小时前
rog_map参数理解
算法
春日见20 小时前
算法与数据结构----哈希表
数据结构·人工智能·算法·机器学习·自动驾驶·哈希算法·散列表
叩码以求索21 小时前
统计按位或能得到最大值的子集数目(一)
数据结构·算法
tachibana221 小时前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
txzrxz21 小时前
单调队列讲解
数据结构·c++·算法·单调队列