31.下一个排列
链接:31.下一个排列
难度:Medium
标签:数组、双指针
简介:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
题解 1 - typescript
- 编辑时间:2020-11-10
- 执行用时:96ms
- 内存消耗:40MB
- 编程语言:typescript
- 解法介绍:计算最小改动数,逆序遍历检测递增。
function nextPermutation(nums: number[]): void {
  const len = nums.length;
  const swap = (i1: number, i2: number) => {
    const t = nums[i1];
    nums[i1] = nums[i2];
    nums[i2] = t;
  };
  const reverse = (left: number) => {
    let right = len - 1;
    while (left < right) {
      swap(left, right);
      left++;
      right--;
    }
  };
  let i = len - 2;
  while (i >= 0 && nums[i] >= nums[i + 1]) {
    i--;
  }
  if (i >= 0) {
    let j = len - 1;
    while (j >= 0 && nums[i] >= nums[j]) {
      j--;
    }
    swap(i, j);
  }
  reverse(i + 1);
}