我有一些重复元素的数组,我想找到最接近数组末尾的重复元素的索引。
#include<iostream>
uisng namespace std;
int main()
{
int arr[15]={1,2,3,4,5,6,7,8,8,8,9,10,11,12,13}; // 8 is repeating 3 times
// lets find the index of element 8 which is closest from the end
int index;
for(int i=0;i<15;i++)
{
if(arr[i]==8)
{
index=i;break;
}
}
cout<<index;
return 0;
}
这很容易,但如果数组非常大,假设数组的大小是10 ^ 6那么可能需要一些时间。我被告知一种经济方式是使用二分搜索!如果有多个元素可以找到最接近末尾的重复元素的索引,那么我怎样才能使用二分搜索?考虑到给出了重复元素?
答案 0 :(得分:0)
显然,二元搜索是可行的方法。我建议看看std::upper_bound。参考文献中还提到了实现的示例:
Institution Name Currency Date Values Required Values
Institution 1 CAD date1 100 100
Institution 1 USD date2 200 200
Institution 2 CAD date3 150 250
Institution 2 CAD date4 300 250
Institution 2 CAD date5 250 250
Institution 2 USD date6 300 300
Institution 3 CAD date7 400 400
Institution 3 USD date8 50 100
Institution 3 USD date9 75 100
Institution 3 USD date10 100 100