题目描述:

示例:

解题思路:
题目给定了条件数组原本是有序的,所以如果直接遍历相当于忽略了这个条件,我们要做的是优化代码,找到更省时间、空间的解法。查找有序数组一般都能用二分查找,这题也不用例外。本题与之前分享的一篇旋转数组的最小值比较像,当然又有不同,这题思路上比那题多了一层。
代码实现如下:
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;
}
}

这篇博客探讨了如何利用二分查找算法优化在已排序数组中搜索目标值的过程。通过分析数组的有序特性,代码实现了在左右边界之间进行有效的查找,减少了时间和空间复杂度。关键在于根据中间值判断目标值可能所在的区间,并调整搜索范围。
636

被折叠的 条评论
为什么被折叠?



