搜索旋转排序数组

1、题目描述

33. 搜索旋转排序数组

 

2、思路:

  数组经过旋转后,还是部分有序,还是用二分法,找到数组的mid,然后看到底是前半段有序,还是后半段有序,因为只要这半段是有序的,就可以用target去比较这半段的起点和这半段的终点,来判断target是否是在这半段中。就可以知道到底该往哪个方向缩小范围进行查找,也就是mid接下来该从哪半段去取。

 

3、代码:

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

。。

posted @ 2022-02-13 16:35  guoyu1  阅读(25)  评论(0编辑  收藏  举报