我有一些重复元素的数组,我想找到最接近数组末尾的重复元素的索引

时间:2017-05-23 21:00:33

标签: c++ arrays algorithm c++14 binary-search

我有一些重复元素的数组,我想找到最接近数组末尾的重复元素的索引。

#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那么可能需要一些时间。我被告知一种经济方式是使用二分搜索!如果有多个元素可以找到最接近末尾的重复元素的索引,那么我怎样才能使用二分搜索?考虑到给出了重复元素?

1 个答案:

答案 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

来源cppreference.com