首页 > 编程语言 > 详细

33. 搜索旋转排序数组

时间:2019-04-30 22:31:28      阅读:161      评论:0      收藏:0      [点我收藏+]

https://leetcode-cn.com/problems/search-in-rotated-sorted-array/submissions/

  • 有序 查找 往二分查找上靠
  • 虽然该数组被旋转导致整体无序,但从中间截断后至少有一半仍然是有序的
  • 注意等号

  从mid处划分,至少有一半是有序的。如果target在有序部分的区间内,可使用二分查找进行查找,如果没有找到直接返回-1。但如果target不在有序部分的区间内,并不能直接得出没有找到target的结论,因为有可能被旋转到了无序的区间。

  每次在有序区间里找target,如果找到返回,如果没有找到,继续把无序区间一分为二,然后在新的有序区间寻找。

package binSearch;

public class search_33 {
    public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length-1;
        int mid = (left+right)/2;

        while (left<=right) {
            mid = (left+right)/2;

            //左边有序
            if (nums[mid]>nums[left]){

                //先在有序区间里找
                //目标值在有序范围内
                if (target<=nums[mid] && target>=nums[left]){
                    return  binSea(nums, left, mid, target);
                }

                //有序区间没有再去无序区间找
                left = mid+1;

            }else {
                //右边有序
                if (target>nums[mid]&&target<nums[right]){
                    return binSea(nums,mid,right,target);
                }
                right=mid-1;
            }
        }


        return -1;
    }

    public int binSea(int[]nums,int left,int right,int target){
        int mid;
        while (left<=right){
            mid = (left+right)/2;
            if (nums[mid]==target){
                return mid;
            }else if (nums[mid]>target){
                right = mid-1;
            }else {
                left = mid+1;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] arr = {4, 5, 6, 7, 0, 1, 2};
        int target = 9;
        search_33 fun = new search_33();
        int result = fun.search(arr, target);
        System.out.println(result);
    }
}

 

33. 搜索旋转排序数组

原文:https://www.cnblogs.com/AshOfTime/p/10798237.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!