081 Search in Rotated Sorted Array II 搜索旋转排序数组 ||

这是 “搜索旋转排序数组”问题的跟进:
如果数组元素允许重复,怎么办?
这会影响到程序的时间复杂度吗?会有怎样的影响,为什么?
假设按照升序排序的数组在预先未知的某个关键点上旋转。
(例如, 0 1 2 4 5 6 7 可能变成 4 5 6 7 0 1 2)。
编写一个函数来判断给定的目标是否在数组中。
该数组可能包含重复项。
详见:https://leetcode.com/problems/search-in-rotated-sorted-array-ii/description/

Java实现:

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

 

posted on 2018-04-03 23:00  lina2014  阅读(111)  评论(0编辑  收藏  举报

导航