leetcode(33)搜索旋转排序数组

搜索旋转排序数组

解题思路:二分查找+二分查找递增分界点

class Solution {
    public int search(int[] nums, int target) {
        int len = nums.length;
        if(len==0){
            return -1;
        }
        if(len==1){
            return nums[0]==target?0:-1;
        }
        int end  = len - 2;
        int start = 0;
        int mid = 0;
        while(start<=end){
            mid  = (start+end)/2;
            if(nums[mid]>nums[mid+1]){
                break;
            }else if(nums[mid]>=nums[start]){
                start = mid + 1;
            }else{
                end = mid - 1;
            }
        }
        if(start>end){
            end = len - 1;
        }else{
            end = mid;
        }
        if(target==nums[0]){
            return 0;
        }else if(target<nums[0]){
            start = end  + 1;
            end = len - 1;
        }else{
            start = 1;
        }
        while(start<=end){
            mid = (start+end)/2;
            if(nums[mid]==target){
                return mid;
            }else if(nums[mid]<target){
                start = mid + 1;
            }else{
                end = mid - 1;
            }
        }
        return -1;
    }
}

猜你喜欢

转载自www.cnblogs.com/erdanyang/p/11203496.html