题目是这样的:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
Find the minimum element.
You may assume no duplicate exists in the array.
这里已经说明数组内没有重复的值,
解这个题:
- 首先想到最简单的办法就是直接从num[0]开始找,一直找到值变小时候,就是 the pivot;(当数组顺序时候这个点应该是num[0]) 这种算法的时间复杂度为O(N),属于最慢的。
- 其次 一种方法就是设置两个观察指针i = num[0] j = num[num.length - 1]。排除顺序的情况时候,我们可以看出,这个局部有序的数组可以分成两部分,其中第一部分num[0...k-1]的所有值要比第二部分num[k...num.length - 1]的值要大,将i 和 j 同时先后先前,对应数值比较,假如num[i]>num[j]则继续移动,如果num[i]<num[j]时候则恰好找到该位置。
- 目前 找到最快的方式就是二分查找,其时间复杂度是Log(N)
关键是中间一个值num[mid]与num[j](或者num[i])进行比较:若num[mid] > num[j],则需要将i的值进行重置;否则 重置j的值,这里需要考虑好是否需要mid+1;因为这里没有重复的值 所以比较时候就仅仅考虑大于和小于两种情况。