题目描述:
示例:
解题思路:
题目给定了条件数组原本是有序的,所以如果直接遍历相当于忽略了这个条件,我们要做的是优化代码,找到更省时间、空间的解法。查找有序数组一般都能用二分查找,这题也不用例外。本题与之前分享的一篇旋转数组的最小值比较像,当然又有不同,这题思路上比那题多了一层。
代码实现如下:
class Solution {
public int search(int[] nums, int target) {
int left = 0,right = nums.length - 1;
while (left <= right) {
int mid = (left + right) / 2; //中间值
if (nums[mid] == target) {//找到即返回
return mid;
} else if (nums[mid] >= nums[left]) {//说明mid左边有序
if (nums[left] <= target && target < nums[mid]) {//判断targrt在left和mid中间
right = mid - 1;
} else {//target不在left和mid中间
left = mid + 1;
}
} else {//说明mid右边有序
if (nums[right] >= target && nums[mid] < target) {//判断targrt在right和mid中间
left = mid + 1;
} else {//target不在right和mid中间
right = mid - 1;
}
}
}
return -1;
}
}