22
33public class Code06_BSAwesome {
44
5+ // 课上的代码
56 public static int getLessIndex (int [] arr ) {
67 if (arr == null || arr .length == 0 ) {
7- return -1 ; // no exist
8+ return -1 ;
89 }
910 if (arr .length == 1 || arr [0 ] < arr [1 ]) {
1011 return 0 ;
@@ -28,4 +29,48 @@ public static int getLessIndex(int[] arr) {
2829 return left ;
2930 }
3031
32+ // 验证得到的结果,是不是局部最小
33+ public static boolean isRight (int [] arr , int index ) {
34+ if (arr .length <= 1 ) {
35+ return true ;
36+ }
37+ if (index == 0 && arr [index ] < arr [index + 1 ]) {
38+ return true ;
39+ }
40+ if (index == arr .length - 1 && arr [index ] < arr [index - 1 ]) {
41+ return true ;
42+ }
43+ return arr [index ] < arr [index - 1 ] && arr [index ] < arr [index + 1 ];
44+ }
45+
46+ // 为了测试
47+ // 生成相邻不相等的数组
48+ public static int [] generateRandomArray (int maxSize , int maxValue ) {
49+ int [] arr = new int [(int ) (Math .random () * maxSize ) + 1 ];
50+ arr [0 ] = (int ) (Math .random () * maxValue ) - (int ) (Math .random () * maxValue );
51+ for (int i = 1 ; i < arr .length ; i ++) {
52+ do {
53+ arr [i ] = (int ) (Math .random () * maxValue ) - (int ) (Math .random () * maxValue );
54+ } while (arr [i ] == arr [i - 1 ]);
55+ }
56+ return arr ;
57+ }
58+
59+ // 为了测试
60+ public static void main (String [] args ) {
61+ int testTime = 500000 ;
62+ int maxSize = 30 ;
63+ int maxValue = 100 ;
64+ System .out .println ("测试开始" );
65+ for (int i = 0 ; i < testTime ; i ++) {
66+ int [] arr = generateRandomArray (maxSize , maxValue );
67+ int ans = getLessIndex (arr );
68+ if (!isRight (arr , ans )) {
69+ System .out .println ("出错了!" );
70+ break ;
71+ }
72+ }
73+ System .out .println ("测试结束" );
74+ }
75+
3176}
0 commit comments