C++实现
链接: https://leetcode.cn/problems/binary-search/description/.
class Solution {
public:
int search(vector<int> &nums, int target) {
int l, r, m;
l = 0;
r = nums.size() - 1;
while (l <= r) {
m = (l + r) / 2;
if (target < nums[m])
r = m - 1;
else if (target > nums[m])
l = m + 1;
else
return m;
}
return -1;
}
};
STL的一些总结
- vector声明后不能单独再赋值,需要使用push_back加入元素,并且这个元素是被加在数组尾部的。
vector v;
v[0] = 1; //错误
二分法
- 易错点:whlie是l<=r还是l<r?
- 区间边界是[],<= 因为这样while循环才是在一个左闭右闭的区间里查找
l = 0;
r = nums.size() - 1;- 区间边界是[),<
l = 0;
r = nums.size() ; - 易错点:查找后右游标是要更新在middle的左侧还是middle?
- 更新的是边界,依旧要根据是[]还是[)来确定,更新错了不需要的值就会被放到下一轮去处理影响结果