2013-11-09 72 views
0

如何在具有最小位置的矢量中找到最大值?查找具有最小位置的数组中的最大元素

例如,如果我有矢量v[5] = {2,2,1,1,1},输出将是v[0]

+1

欢迎来到Stack Overflow。请尽快阅读[关于]页面。你有什么尝试?通常情况下,如果您显示您尝试过的内容,人们将帮助您修复代码,但不会为您编写代码。显然,有一个2遍算法,其中第一次通过阵列确定最大值,第二次通过确定首先出现哪个索引值。但是,也有一个1遍算法。你应该找那个。这真的不是那么难。另外,您对表示最大值出现的最小位置的索引感兴趣,而不是该值。 –

回答

0

查找数组的结束数组中的最大值为单次执行

2

一个惯用的方式做到这一点是使用std::max_element。这将返回一个迭代最大的元素:

#include <algorithm> // for std::max_element 
#include <iterator> // for std::begin, std::end 
#include <iostream> 

int main() 
{ 
    v[5] = {2,2,1,1,1}; 
    auto it = std::max_element(std::begin(v), std::end(v)); 
    std::cout << *it << std::endl; 
} 

如果你需要的元素的索引,你可以使用std::distance

std::cout << "index " << std::distance(std::begin(v), it) << std::endl; 
0

这里是你可以在自己的循环做到这一点:

if(!v.size()) return -1; 
int maxValue = v[0], maxPosition = 0; 
for(int i = 1; i < v.size(); i++) { 
    if(v[i] > maxValue) maxValue = v[maxPosition = i]; 
} 
return maxPosition; 

如果你想获得最大的最后一次出现,只是改变if(v[i] > maxValue)if(v[i] >= maxValue)或改变回路工作后到前。

相关问题