Find Mininum in Rotated Sorted Array I and II
题目链接:
Find Minimum in Rotated Sorted Array
Find Minimum in Rotated Sorted Array II
Suppose an array sorted in ascending order 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.
I和II的区别在于是否有重复元素
题目的要求
- 一个升序的数组且无重复元素
- 在处理数组前进行部分反转
- 找出最小元素
题目分析
- 寻找最小值,我们可以用二分查找法来做
- 在一个区间的A,如果A[start] < A[end],那么该区间一定是有序的
解题思路
假设一个轮转的排序数组arr,我们首先获取中间元素的值,arr[mid], mid = start + (end - start)/2.因为没有重复数组,那么就有两种情况。
- arr[mid] > arr[start], 那么最小值一定在右半区间,eg:{4,5,6,7,0,1,2} 中间数为7.7>4,最小元素一定在{7,0,1,2}
- arr[mid] < arr[start], 那么最小值一定在左半区间,eg:{7,0,1,2,3,4,5,6}中间数为2,2<7,最小元素一定在{7,0,1,2}
- 处理重复元素,当arr[mid] == arr[start], 跳过start++.
边界值
- 输入数组arr == null, arr.length == 0 ,return 0
- arr.length == 1, return arr[0]
- 输入数组arr为有序数组,return arr[start];
复杂度
时间复杂度为O(logn),空间复杂度为O(N)
代码
1 | public static int findMin(int[] arr){ |