1. 程式人生 > >什麽是字典序算法?

什麽是字典序算法?

邊界 什麽是 ring 如果 bre 個數 emp http 找到

@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

什麽是字典序算法?