leetcode 33. Search in Rotated Sorted Array (复杂二分查找)

来源:互联网 发布:2017手机淘宝主图尺寸 编辑:程序博客网 时间:2024/09/21 09:00

题意:

给你一个无重复元素的递增数组,这个数组后来被左移或者右移了未知步数,形成新的数组,让你找到target所在位置,如果不存在则返回-1;

思路:

同样可以使用二分查找,但是要考虑多种情况。

情况首先分为两大类:

1.中间元素大于等于左边界的值,(说明从左到中间是绝对递增的。

2.中间元素小于左边界的值(说明从中间到右边是绝对递增的。

然后每种情况考虑target值的可能位置即可确定下次二分查找在哪个区间执行。

java代码:

class Solution {    public int search(int[] nums, int target) {        int r = nums.length;        if(r==0){            return -1;        }        int l = 0;        r -= 1;        while(l<=r){            int mid = (l+r)>>1;            if(target==nums[mid]){                return mid;            }            if(nums[mid]>=nums[l]){                if(target<nums[mid]&&target>=nums[l]){                    r = mid-1;                }                else{                    l = mid+1;                }            }            else{                if(target>nums[mid]&&target<=nums[r]){                    l = mid+1;                }                else{                    r = mid-1;                }            }        }        return -1;    }}

阅读全文
1 0
原创粉丝点击