Как я могу найти максимальное значение в векторе, который имеет минимальную позицию?
Например, если у меня есть вектор v[5] = {2,2,1,1,1}
выход будет v[0]
,
Идиоматический способ сделать это будет использовать 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;
Найти максимальное значение в массиве от конца массива для реализации за один проход
Вот как вы можете сделать это в своем собственном цикле:
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)
или измените цикл, чтобы работать обратно на фронт.