【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
相关推荐
rannn_1113 小时前
【力扣hot100】动态规划专题|70、118、198、279、322、139、300、152、416、32
算法·leetcode·动态规划
渡之3 小时前
ArduPilot(APM)滤波器之 HarmonicNotchFilter 深度解析
算法·无人机
我不会起名字3223 小时前
一天一道算法题(26):栈的简单应用
java·数据结构·python·算法·leetcode·golang·
lvwangshu4 小时前
exBSGS 算法
数学·算法
不会就选b4 小时前
算法日常・每日刷题--<贪心+大根堆>2
数据结构·算法
码艺-Alimjan4 小时前
维吾尔语数字转文本
java·javascript·python·算法·go
AI服务老曹4 小时前
算法任务配置完整流程:明厨亮灶项目从0到1怎么做 | AI视频分析算法实践
人工智能·算法·音视频
hahaha60164 小时前
HLS高层次综合设计--axi之burst纠偏
开发语言·算法·fpga开发·c#
hans汉斯4 小时前
【计算机科学与应用】基于联合熵驱动改进麻雀搜索优化VMD的DAS信号去噪方法
深度学习·算法·yolo·软件工程·汉斯出版社
词却4 小时前
机器学习入门:手写数字识别与算法对比
人工智能·算法·机器学习