function findNearestNumber(arr) {
//1.从后向前查看逆序区域,找到逆序区域的前一位,也就是数组置换的边界
var index = findTransferPoint(arr);
//如果边界为0则代表整个数组为逆序,无法得到更大的相同数字组成的整数,返回null
if (index == 0) {
return null;
}
//2.把逆序区域的前一位和逆序区域中刚刚大于它的数字交换位置
//复制并入参,避免直接修改入参
var arr2 = [...arr];
exchangeHead(arr2, index);
//3.把原来的逆序区域转为顺序
reverse(arr2, index);
console.log(arr2);
}
function findTransferPoint(arr) {
for (var i = arr.length - 1; i > 0; i--) {
if (arr[i] > arr[i - 1]) {
return i;
}
return 0;
}
}
function exchangeHead(arr, index) {
var head = arr[index - 1];
for (var i = arr.length - 1; i > 0; i--) {
if (head < arr[i]) {
arr[index - 1] = arr[i];
arr[i] = head;
break;
}
}
}
function reverse(num, index) {
for (var i = index, j = num.length - 1; i < j; i++, j--) {
var temp = num[index];
num[index] = num[j];
num[j] = temp;
}
}
var arr = [1, 2, 3, 4, 5];
findNearestNumber(arr);
js寻找全排列的下一个数
最新推荐文章于 2025-05-29 11:38:29 发布