题目链接:https://leetcode.com/problems/binary-search/
题意大概是在已排序的数列中找出给定数字的位置。若不存在该数字,输出-1
Input: nums = [-1,0,3,5,9,12], target = 9
Output: 4
Input: nums = [-1,0,3,5,9,12], target = 2
Output: -1
int search(int* nums, int numsSize, int target) {
int l = 0;
int r = numsSize;
int mid;
while(l < r){
mid = (l + r) / 2;
if(target < nums[mid]){
r = mid;
}else if(target > nums[mid]){
l = mid;
}else{
return mid;
break;
}
}
return -1;
}
当不存在要找的特定数字时,上述答案就会出现死循环问题,如:
input : 1 4 6, target = 5
一开始,l = 0 ,r = 2 ,mid = 1
因为 nums[mid] < target, 所以 l = mid = 1;
接着往下走,l = 1, r = 2 ,mid = 1,因为nums[mid] < target,所以 l = mid = 1,然后不断循环循环循环。因此,当nums[mid] < target时,l = mid+1。
int search(int* nums, int numsSize, int target) {
int l = 0;
int r = numsSize;
int mid;
while(l < r){
mid = (l + r) / 2;
if(target < nums[mid]){
r = mid;
}else if(target > nums[mid]){
l = mid + 1;
}else{
return mid;
break;
}
}
return -1;
}