码迷,mamicode.com
首页 > 其他好文 > 详细

<Binary Search> 81

时间:2019-12-11 13:14:34      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:target   相同   strong   tar   solution   als   情况   大于   重复   

81. Search in Rotated Sorted Array II

如果中间的数小于最右边的数,则右半段是有序的,若中间数大于最右边数,则左半段是有序的。而如果可以有重复值,就会出现来面两种情况,[3 1 1] 和 [1 1 3 1],对于这两种情况中间值等于最右值时,目标值3既可以在左边又可以在右边,那怎么办么,对于这种情况其实处理非常简单,只要把最右值向左一位即可继续循环,如果还相同则继续移,直到移到不同值为止

class Solution {
    public boolean search(int[] nums, int target) {
        int n = nums.length, left = 0, right = n - 1;
        while(left <= right){
            int mid = left + (right - left) / 2;
            if(nums[mid] == target) return true;
            if(nums[mid] < nums[right]){
                if(nums[mid] < target && target <= nums[right]) left = mid + 1;
                else right = mid - 1;
            }else if(nums[mid] > nums[right]){
                if(nums[left] <= target && target < nums[mid]) right = mid - 1;
                else left = mid + 1;
            }else --right;
        }
        return false;
    }
}

 

<Binary Search> 81

标签:target   相同   strong   tar   solution   als   情况   大于   重复   

原文地址:https://www.cnblogs.com/Afei-1123/p/12021691.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!