看到是有序数组的变型,想到可以使用二分查找法。
二分查找分递归法和非递归法,这里只给出非递归法的解法。
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
int len = array.length;
if (len == 0)//首先排除空数组
return 0;
int low = 0, high = len - 1;//low和high进行记录
if (array[low] < array[high]) //已经是排序数组本身直接返回第一个,前面0个元素搬到末尾
return array[low];
while (low < high) { //非递归二分查找,直到high-low=1
int mid = low + (high - low)/2;
if(array[low] == array[mid] && array[high] == array[mid])
return minInOrder(array);//首尾元素和mid元素相同,直接顺序查找
if(array[mid]>=array[low])
low = mid;
else if(array[mid] <= array[high])
high = mid;
if(high - low == 1)
return array[high];
}
return -1;
}
public int minInOrder(int [] array){//首尾元素和mid元素相同,直接顺序查找
int min = array[0];
for (int num:array) {
if(num < min)
min = num;
}
return min;
}
}