将index不断除以2以找到对应的值,while条件是在index保持在>=0 && < array size。
因为不断地根据寻找的边界限缩,所以index不可能超出前面说的两个范围,因此乾脆改成执行for回圈 log(n)次,并将初始lower bound设为0,upper bound设为array size。
还是不对,所以改成用lb, ub去判定。
class Solution {
public:
int search(vector<int>& nums, int target) {
int ans = -1;
int lb = 0, ub = nums.size() - 1;
while(lb <= ub) {
//cout << "(" << lb << ", " << ub << ", " << index << ")";
int index = lb + (ub - lb) / 2;
if ( nums[index] < target )
lb = index + 1;
else if ( nums[index] > target )
ub = index - 1;
else {
ans = index;
break;
}
}
return ans;
}
};
有遇到ERROR: AddressSanitizer: heap-buffer-overflow on address
原因是upper bound 不应该使用arrary size,而是要使用最大index,即array size - 1
https://zh.wikipedia.org/wiki/二分搜寻演算法
最近实在是有点折磨,刚把民航局的案子吿一个段落,最近接到一个大案子,每天要腾个一小时来处理;晚上 I...
昨天笔者有提到, 资料库的运作效率着实让笔者伤透脑筋, 然而资料库的参数是可以调整的 笔者搜寻一大堆...
霓虹灯文字 教学原文参考:霓虹灯文字 这篇文章会介绍在 GIMP 里使用选取、选取边框、填色、文字、...
前两天我已经学会用 CC: Tweaked 电脑读取磁片和播放音乐 今天我要来写 Code 啦 !!...
pointers to functions 乍听之下好像有点奇怪, 但一个 function 跟资料...