二分查找
第一种写法:target是在一个左闭右闭区间[left,right]
int search(int* nums, int numsSize, int target)
{
int left = 0;
int right = numsSize - 1; // 定义target在左闭右闭的区间[left, right]
while (left <= right) {
int mid = left + ((right - left) / 2);
if (nums[mid] > target) {
right = mid - 1;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
return mid;
}
}
return -1;
}
第二种写法:target是在一个左闭右开区间[left,right)
int search(int* nums, int numsSize, int target)
{
int left = 0;
int right = numsSize; // 定义target在左闭右开的区间[left, right)
while (left < right) {
int mid = left + ((right - left) / 2);
if (nums[mid] > target) {
right = mid; // target在左区间,在[left, middle)中
} else if (nums[mid] < target) {
left = mid + 1;
} else {
return mid;
}
}
return -1;
}