什么是字典序算法?

Posted dongma

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是字典序算法?相关的知识,希望对你有一定的参考价值。

@Test
public void test() {
int[] nums={1,5,3,2,4};
int[] nearestNumber = findNearestNumber(nums);
System.out.println(Arrays.toString(nearestNumber));
}

static int[] findNearestNumber(int[] numbers) {
int[] numbersCopy = Arrays.copyOf(numbers, numbers.length);
//找到逆序区域前一位
int index=findTransferPoint(numbersCopy);
//如果数字置换边界为0,说明整个数组已经逆序,无法得到更大的相同数
if(index == 0){
return null;
}
//把逆序区域的前一位和刚大于它的数字进行交换
exchangeHead(numbersCopy,index);
//把原来的逆序改成顺序
reverse(numbersCopy,index);
return numbersCopy;
}

private static int[] reverse(int[] numbers, int index) {
for (int i = index+1; i < numbers.length-1; i++) {
if(numbers[i] > numbers[i+1]){
int temp=numbers[i+1];
numbers[i+1]=numbers[i];
numbers[i]=temp;
}
}
return numbers;
}

private static int[] exchangeHead(int[] numbers, int index) {
int head=numbers[index-1];
for (int i = numbers.length-1; i > 0 ; i--) {
if(head < numbers[i]){
numbers[index-1]=numbers[i];
numbers[i]=head;
break;
}
}
return numbers;
}

private static int findTransferPoint(int[] numbers) {
for (int i = numbers.length-1; i >0 ; i--) {
if(numbers[i]>numbers[i-1]){
return i;
}
}
return 0;
}


原文:https://mp.weixin.qq.com/s/_mIeGKdvTOH-1jleJ4aADg

 






















































以上是关于什么是字典序算法?的主要内容,如果未能解决你的问题,请参考以下文章

字典序法生成全排列算法图

字典序问题 算法实现题1-2

排列算法——字典序法

排列算法——字典序法

杂谈:经典算法之字典序排列

[PHP]算法-拼接最小字典序的实现