leetcode 33. 搜索旋转排序数组 中等 二分搜索

题目:
在这里插入图片描述

分析:在数组里面查找,首选使用二分搜素(二分查找),但是题目条件给的是某个点旋转了的数组,也就是数组分开两个部分有序,那么可以想到可以分开两个部分分别进行查找,需要先找到旋转点,剩下的就是二分搜索的工作

代码:

class Solution {
    public int search(int[] nums, int target) {
        if(nums == null || nums.length == 0){
            return -1;
        }
        int breakPoint = nums.length - 1;
        for(int i = 1; i < nums.length; i++){
            if(nums[i] < nums[i-1]){
                breakPoint = i-1;
                break;
            }
        }
        int result = binarySearch(nums, 0, breakPoint, target);
        if(result < 0){
            result = binarySearch(nums, breakPoint+1, nums.length-1, target);
            return result;
        }else{
            return result;
        }
    }

    public int binarySearch(int[] nums, int low, int high, int target){
        while(low <= high){
            int mid = low + (high-low)/2;
            if(target < nums[mid]){
                high--;
            }else if(target > nums[mid]){
                low++;
            }else{
                return mid;
            }
        }
        //找不到
        return -1;
    }
}

在这里插入图片描述
在这里插入图片描述

发布了134 篇原创文章 · 获赞 17 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_40208575/article/details/104792347