【发布时间】:2020-08-26 15:11:01
【问题描述】:
使用的语言:C++14。
我得到了 2 个排序数组 A 和 B。现在,对于 A 中的每个元素,如果可能的话,我必须在 B 中找到一个更大的元素,并注意一旦我在 B 中为 A 中的特定元素找到了一个元素,我只能在 B 中的该索引之前搜索。 我正在做这样的事情:
int j=0;
for(i=0;i < A.size();i++)
{
int index = upper_bound(B.begin()+j,B.end(),A[i]) - B.begin();
if(index>=B.size()){
break;
}
else{
cout<<"For A[]"<<A[i]<<" element "<<B[index]<<" is greater "<<"\n";
j = index + 1;
}
}
即使我正在使用upper_bound 进行二分搜索,程序仍然为大型数组(例如大小为1000000)提供超出时间限制。
我不知道为什么?
PS:我知道这可以在线性时间内使用 2 个指针来完成,但是我想知道为什么我的解决方案失败了。我是新来的,所以请帮帮我。
【问题讨论】:
-
甚至小于线性时间:如果 A 和 B 已排序,则只能查看 B 的最后一个元素。对于 A 中的每个较小的元素,B 中的这个元素将更大。您可以在 A 上运行二进制搜索:假设 B 中的最后一个元素是 x。找到 A 中小于 x 的最高元素的索引(使用二分查找)。
-
对不起@Roim,造成混乱。请参阅更新的问题。我只想在我在 B 中找到的元素之前搜索。希望现在它清除了。
标签: c++ sorting stl binary-search