题目:
思路:
-
原始数组递增有序,经过一定的位移后得到现在的数组。
-
需要找到数组中最小的元素,
-
方法一:
- 定义一个变量保存数组的第一个元素,顺序遍历数组,若存在后面的元素比当前元素小,那么说明后面的元素是最小的元素。
-
方法二:
- 原基础顺序遍历查找效率较低,因此可以使用二分查找优化
实现:
class Solution {
// public int minArray(int[] numbers) {
// int len = numbers.length;
// int res = numbers[0];
// for (int i = 0; i < len - 1; i++) {
// if (numbers[i + 1] < numbers[i]) {
// res = numbers[i + 1];
// break;
// }
// }
// return res;
// }
public int minArray(int[] numbers) {
int start = 0;
int end = numbers.length - 1;
while (start < end) {
int mid = (start + end) / 2;
if (numbers[mid] > numbers[end]) {
start = mid + 1;
} else if (numbers[mid] < numbers[end]) {
end = mid ;
} else {
end--;
}
}
return numbers[start];
}
}