33. Search in Rotated Sorted Array


June-21-2019

这个题代码写得不如一刷简洁
1 - 先通过nums[l] < nums[r] 判断是否rotate
2 - 通过nums[m]和nums[l] 关系判断是6 7 1 2 3 4 5,还是6 7 8 9 1 2,左边右边哪边多,然后再接着判断,感觉就是楞做的。。

仔细看其实把1的判断去掉也能过= =因为1的逻辑已经囊括在2里面了,所以这次写的不如一刷简洁= =

    public int search(int[] nums, int target) {
        if (nums == null || nums.length == 0) return -1;
        
        int l = 0, r = nums.length - 1;
        
        while (l + 1 < r) {
            int m = l + (r - l) / 2;
            int val = nums[m];
            if (val == target) {
                return m;
            }
            // } else if (nums[l] < nums[r]) {
            //     if (val < target) {
            //         l = m + 1;
            //     } else {
            //         r = m - 1;    
            //     }
            // } 
             else {
                // 6 7 8 1 2 3 4 5    
                if (val < nums[l]) {
                    if (target > val && target <= nums[r]) {
                        l = m;
                    } else {
                        r = m;
                    }
                } else {
                // 6 7 8 9 10 11 1 2 3
                    if (target >= nums[l] && target < val) {
                        r = m;
                    } else {
                        l = m;
                    }
                }
            }
        }
        
        if (nums[l] == target) {
            return l;
        } else if (nums[r] == target) {
            return r;
        } else {
            return -1;
        }
    }
原文地址:https://www.cnblogs.com/reboot329/p/11068487.html