题目
https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/
解法
暴力解法, 0(n)不符合要求
有序,要到0(logn),考虑二分查找,排序数组的查找问题首先考虑使用 二分法 解决,其可将遍历法的 线性级别 时间复杂度降低至 对数级别 。
定下大概思路,
接着弄清楚算法流程:
- 入口,设置 i, j 指针分别指向 numbers数组左右两端,m = (i + j) // 2为每次二分的中点
- 循环二分: - 
- 比较 number[m] > number[j]
- number[m] < number[j]
- 特殊  number[m] == number[j]
 - 是否可以用 - numbers[m]和- numbers[i]比较做代替?
 解析: 不可以。因为做比较的目的是判断 mm 在哪个排序数组中。但在- numbers[m] > numbers[i]情况下,无法判断 m 在哪个排序数组中。
 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 
 | class Solution {public int minArray(int[] numbers) {
 if (numbers == null || numbers.length ==0) {
 return Integer.MIN_VALUE;
 }
 int len = numbers.length;
 int i=0, j = len-1;
 while(i<j) {
 int m = i + (j-i)/2;
 
 
 if (numbers[m] > numbers[j]) {
 i = m+1;
 }
 if (numbers[m] < numbers[j]) {
 j = m;
 }
 if (numbers[m] == numbers[j]) {
 j--;
 }
 
 if (numbers[m] > numbers[j]) {
 i = m+1;
 } else if(numbers[m] < numbers[j]) {
 j = m;
 } else {
 j--;
 }
 
 }
 return numbers[i];
 }
 }
 
 |