标签:
Follow up for "Find Minimum in Rotated Sorted Array":
What if duplicates are allowed?Would this affect the run-time complexity? How and why?
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.
The array may contain duplicates.
思路分析:这题类似于LeetCode Find Minimum in Rotated Sorted Array ,具体解析可以参考前一篇,这题的特殊之处是数组中可以有重复元素,那么当A[m]=A[l]时,执行l++即可。此时,就只可以排除掉一个元素,而不是一半元素,最坏情况下算法时间复杂度是O(n),不再是O(logN)。
AC Code:
public class Solution { public int findMin(int[] nums) { int n = nums.length; int l = 0; int r = n-1; int min = nums[0]; while(l < r){ int m = l + (r-l) / 2; if(nums[m] < nums[l]) { min = Math.min(nums[m], min); r = m; } else if(nums[m] > nums[l]){ min = Math.min(nums[l], min); l = m; } else { l++; } } min = Math.min(nums[l], min); min = Math.min(nums[r], min); return min; } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
LeetCode Find Minimum in Rotated Sorted Array II
标签:
原文地址:http://blog.csdn.net/yangliuy/article/details/47086789