二分查找算法虽然简单,但是遇到待查找的term有重复的时候,也会存在各种小问题。下面给出二分查找中遇到重复term时,第一个可插入位置和最后一个可插入位置的代码。
第一个可插入位置:
class Solution {
public:
int binarySearch(vector<int> &array, int target) {
if(array.size() == 0) {
return -1;
}
int start = 0;
int end = array.size() - 1;
int mid;
while(start + 1 < end) {
mid = start + (end - start) / 2;
if(array[mid] == target) {
end = mid; // 片段1
} else if(array[mid] > target) {
end = mid;
} else if(array[mid] < target) {
start = mid;
}
}
// 片段2
if(array[start] == target) {
return start;
}
// 片段3
if(array[end] == target) {
return end;
}
return -1;
}
};最后一个可插入位置:
1、将片段1中的代码换为:start = mid;
2、将片段2和片段3的代码位置互换。
本文介绍了二分查找算法在处理包含重复项的数据时如何找到目标元素的第一个和最后一个可插入位置的方法。通过调整搜索过程中的指针移动逻辑,实现对重复元素的有效定位。

174万+

被折叠的 条评论
为什么被折叠?



