基础算法这东西看起来很简单,但是自己在白板上还是会经常出错,因为总是有很多细节没哟把握好。
因此对基础算法都进行一番手写,重在对细节的体会。
二分查找法,在一个排序的vector里面,在区间【first,last】进行查找tar,如果查找成功则返回tar的坐标,否则返回-1。
int binarySearch(vector<int> &nums, int first, int last, int tar) {
int mid = 0;
while (first <= last) { // 细节1:<= 而不是< ,是因为first == last 的时候 还要再 判断一次 nums[mid] 是否等于tar
mid = first + (last - first) / 2; //细节2:(first + last) / 2 可能会溢出
if (tar == nums[mid]) {
return mid;
}
else if (tar < nums[mid]) {
last = mid - 1;
}
else {
first = mid + 1;
}
}
return -1;
}