Skip to content

Commit 7dc873a

Browse files
author
liuxun
committed
字典序算法
1 parent 7fdce5c commit 7dc873a

File tree

5 files changed

+63
-12
lines changed

5 files changed

+63
-12
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.algorithm.study.demo.algorithm;
2+
3+
import java.util.Arrays;
4+
5+
/**
6+
* 给定一个正整数,实现一个方法来求出离该整数最近的大于自身的“换位数”。
7+
*/
8+
public class DictProject {
9+
public static void main(String[] args) {
10+
int[] result=findNearestNumber(new int[]{1,2,3,5,4});
11+
for (int i=0;i<result.length;i++){
12+
System.out.println(result[i]);
13+
}
14+
}
15+
//主流程,返回最近一个大于自身的相同数字组成的整数。
16+
public static int [] findNearestNumber( int [] numbers){
17+
18+
//拷贝入参,避免直接修改入参
19+
20+
int [] numbersCopy = Arrays.copyOf(numbers, numbers.length);
21+
//1.从后向前查看逆序区域,找到逆序区域的前一位,也就是数字置换的边界
22+
int index = findTransferPoint(numbersCopy);
23+
24+
//如果数字置换边界是0,说明整个数组已经逆序,无法得到更大的相同数字组成的整数,返回自身
25+
if(index ==0){return null;}
26+
//2.把逆序区域的前一位和逆序区域中刚刚大于它的数字交换位置
27+
exchangeHead(numbersCopy, index);
28+
//3.把原来的逆序区域转为顺序
29+
reverse(numbersCopy, index);
30+
31+
return numbersCopy;
32+
}
33+
private static int findTransferPoint(int[] numbers){
34+
for (int i=numbers.length-1;i>0;i--){
35+
if (numbers[i]>numbers[i-1]){
36+
return i;
37+
}
38+
}
39+
return 0;
40+
}
41+
private static void exchangeHead(int[] numbers,int index){
42+
int head=numbers[index-1];
43+
for (int i=numbers.length-1;i>0;i--){
44+
if (head<numbers[i]){
45+
numbers[index-1]=numbers[i];
46+
numbers[i]=head;
47+
break;
48+
}
49+
}
50+
}
51+
private static int[] reverse(int[] num,int index){
52+
for (int i=index,j=num.length-1;i<j;i++,j--){
53+
int temp=num[i];
54+
num[i]=num[j];
55+
num[j]=temp;
56+
}
57+
return num;
58+
}
59+
}

src/main/java/com/algorithm/study/demo/FindProject.java renamed to src/main/java/com/algorithm/study/demo/algorithm/FindProject.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
package com.algorithm.study.demo;
2-
3-
import java.util.ArrayList;
4-
import java.util.concurrent.Callable;
5-
import java.util.concurrent.Executor;
6-
import java.util.concurrent.ExecutorService;
7-
import java.util.concurrent.Executors;
1+
package com.algorithm.study.demo.algorithm;
82

93
/**
104
* 查找算法

src/main/java/com/algorithm/study/demo/Lintcode2Project.java renamed to src/main/java/com/algorithm/study/demo/algorithm/Lintcode2Project.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
package com.algorithm.study.demo;
1+
package com.algorithm.study.demo.algorithm;
22

3-
import java.lang.reflect.Array;
43
import java.util.ArrayList;
54
import java.util.Arrays;
65

src/main/java/com/algorithm/study/demo/LintcodeProject.java renamed to src/main/java/com/algorithm/study/demo/algorithm/LintcodeProject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.algorithm.study.demo;
1+
package com.algorithm.study.demo.algorithm;
22

33
import java.util.*;
44

src/main/java/com/algorithm/study/demo/SortProject.java renamed to src/main/java/com/algorithm/study/demo/algorithm/SortProject.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
package com.algorithm.study.demo;
1+
package com.algorithm.study.demo.algorithm;
22

33
import com.algorithm.study.demo.model.User;
44

55
import java.lang.reflect.Method;
6-
import java.util.ArrayList;
76
import java.util.Arrays;
87
import java.util.Collections;
98
import java.util.List;

0 commit comments

Comments
 (0)