IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]LeetCode Find Minimum in Rotated Sorted Array II

    yangliuy发表于 2015-07-27 16:25:57
    love 0

    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;
        }
    }




沪ICP备19023445号-2号
友情链接