刷
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; } }