您的位置:首页 > 其它

二分查找中term有重复的情况

2015-11-05 21:08 309 查看
二分查找算法虽然简单,但是遇到待查找的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的代码位置互换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二分查找