这个题目一旦想到logn那么就是和二分法,折半法,还有归并靠齐
这个题很显然用二分最好了,将其划分为两个区域
class Solution {
public int search(int[] nums, int target) {
int siz = nums.length; // 数组长度
int lef = 0, rig = siz - 1; // 初始化左右指针
while (lef <= rig) { // 当左指针小于等于右指针时进行循环
int mid = (lef + rig) >> 1; // 计算中间索引,使用右移运算符相当于除以 2
if (nums[mid] == target) // 如果中间元素等于目标值,返回中间索引
return mid;
if (nums[0] <= nums[mid]) { // 如果左半部分有序
if (nums[0] <= target && target < nums[mid]) // 如果目标值在左半部分范围内
rig = mid - 1; // 移动右指针
else
lef = mid + 1; // 否则移动左指针
} else { // 右半部分有序
if (nums[mid] < target && target <= nums[siz - 1]) // 如果目标值在右半部分范围内
lef = mid + 1; // 移动左指针
else
rig = mid - 1; // 否则移动右指针
}
}
return -1; // 如果未找到目标值,返回 -1
}
}