给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
在写完之后,总是会出现“超出时间限制”,这个是因为下面代码第7行和第11行没有“-1”和“+1”,其实想想也知道,当nums[cetr] > target时,nums[cetr]大于查找值,所以下一次的查找范围是i到cetr - 1,而不是i到cetr。
示例:
class Solution {
public:
int search(vector<int>& nums, int target) {
int i = 0, j = nums.size()-1, cetr = (i+j)/2;
while (i <= j) {
if (nums[cetr] > target) {
j = cetr - 1; // 之前没有减一和加一,导致时间复杂度很高
cetr = (i+j)/2;
}
else if(nums[cetr] < target) {
i = cetr + 1; // 之前没有减一和加一,导致时间复杂度很高
cetr = (i+j)/2;
}
else {
return cetr;
}
}
return -1;
}
};