实现思路:
先判断数组两端的数是否是局部最小,如果不是,对数组进行二分,再分别判断两端是否是局部最小,重复此过程,直到找到。
Java代码:
public class min {
//寻找局部最小值
public static void findMin(int[] arr){
if(arr == null || arr.length < 2){
System.out.println("请输入至少有两个元素的数组!");
return;
}else if(arr[0] < arr[1]){
System.out.println(arr[0]);
return;
}else if(arr[arr.length - 1] < arr[arr.length - 2]){
System.out.println(arr[arr.length - 1]);
return;
}
half(arr, 0, arr.length - 1);
}
//二分
public static void half(int[] arr, int a, int b){
int m = a + ((b - a) >> 1);
//退出条件
if(arr[m] < arr[m - 1] && arr[m] < arr[m + 1]){
System.out.println(arr[m]);
return;
}
if(arr[m] > arr[m - 1]){
half(arr, a, m);
}else{
half(arr, m + 1, b);
}
}
//主方法
public static void main(String[] args){
int[] arr = {4,2,1,5,6,9,7,1,6};
findMin(arr);
}
}
以上内容为个人学习总结,如有错误,欢迎指正。