(5/31/16)Leetcode 154. Find Minimum in Rotated Sorted Array II

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];
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容