154. Find Minimum in Rotated Sorted Array II
2016-05-27 15:32
477 查看
题目:Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e.,
Find the minimum element.The array may contain duplicates.
此题是I的扩展,有序数组部分元素置于数组后半部,数字可能重复,例如【1,1,1,0,1】,考虑使用二分查找的变形
如果mid>=left,说明min在mid的右边(包含mid)→_→
如果mid<=right,说明min在mid的左边(包含mid)☜
特例:【1,1,1,0,1】与【1,0,1,1,1】left=mid=right这种情况,无法使用上述条件寻找,只能通过遍历来寻找最小值
(i.e.,
0 1 2 4 5 6 7might become
4 5 6 7 0 1 2).
Find the minimum element.The array may contain duplicates.
此题是I的扩展,有序数组部分元素置于数组后半部,数字可能重复,例如【1,1,1,0,1】,考虑使用二分查找的变形
如果mid>=left,说明min在mid的右边(包含mid)→_→
如果mid<=right,说明min在mid的左边(包含mid)☜
特例:【1,1,1,0,1】与【1,0,1,1,1】left=mid=right这种情况,无法使用上述条件寻找,只能通过遍历来寻找最小值
public class Solution { public int findMin(int[] nums) { if(nums == null || nums.length==0) return -1; int l=0,r=nums.length-1,mid=(l+r)/2; while(l<=r && l>=0 && r<nums.length){ if(r-l ==1 || nums[l] < nums[r]) return Math.min(nums[l], nums[r]); //终止 //如果存在[1,1,1,0,1]这种情况不能用二分法判断,只能遍历 if(nums[mid] == nums[l] && nums[mid] == nums[r]){//必须放在下面两个if条件之前 int min=nums[0]; for(int i=l;i<=r;i++) min=Math.min(min, nums[i]); return min; } if(nums[mid] >= nums[l]) l=mid; if(nums[mid] <= nums[r]) r=mid; mid=(l+r)/2; } return nums[mid]; } }
相关文章推荐
- 289. Game of Life
- 349. Intersection of Two Arrays I &&II (Java)
- 11. Container With Most Water
- 48. Rotate Image
- 75. Sort Colors
- 64. Minimum Path Sum
- 59. Spiral Matrix II
- 几个字符串相关的题目,来自LeetCode和LintCode
- 347. Top K Frequent Element(java)
- 109. Convert Sorted List to Binary Search Tree
- 2. Add Two Numbers(Java)
- 142. Linked List Cycle I&II
- 66. Plus One(Java) & 43. Multiply Strings
- java导出pdf
- Autodesk的ViewAndDataAPI学习小记
- ScrollView嵌套listView显示一条item解决办法
- mac下eclise快捷键
- Charles抓包工具的使用
- Python set
- mvn create proj