美文网首页
(5/31/16)Leetcode 154. Find Mini

(5/31/16)Leetcode 154. Find Mini

作者: Flashpacker | 来源:发表于2016-06-01 12:31 被阅读0次

    Medium, 用时20分钟
    出现了两处错误:
    1.处理duplicates的方法没问题,仅需考虑尾部的duplicates即可,从而划归为153题(no duplicates)。
    2.在去除尾部duplicates后需要再去除corner case(error1), 否则[1,2,1]无法test成功(去除duplicates后会出现顺序情况)
    3.error2,bs的条件不能让pivot与nums[begin]相比,应该与nums[0]。

    public class Solution {
        public int findMin(int[] nums) {
            //9:07
            //Eliminate some corner cases!
            int length = nums.length;
            if(length == 1) return nums[0];
            if(length == 2) return Math.min(nums[0], nums[1]);
            if(nums[0] < nums[length - 1]) return nums[0];
            
            int begin = 0, end = length-1;
            //remove duplicates in the tail!
            while (nums[end] == nums[0] && end > 0) {
                end --;
            }
            if(end == 0) return nums[0];
            //this is necessary(error1)
            if(nums[0] < nums[end]) return nums[0];
            
            while (begin < end) {
                int mid = (begin + end) / 2;
                int pivot = nums[mid];
                //必须是nums[0],不能是nums[begin]!与不同的bs不同(error2)
                if(pivot >= nums[0]) begin = mid + 1;
                else end = mid;
            }
            return nums[begin];
        }
    }
    

    相关文章

      网友评论

          本文标题:(5/31/16)Leetcode 154. Find Mini

          本文链接:https://www.haomeiwen.com/subject/jushdttx.html