#include <vector>
#include <string>
template <typename Comparable>
const Comparable & findKthLargest( const std::vector<Comparable> & v, const int k){
int counter;
Comparable j;
for (Comparable i : v){
counter = 0;
j = v[i];
for(Comparable p : v){
if(v[p] > j){
counter++;
}
}
if(counter == k){
return v[i];
}
}
return -1;
}
Я прошел вектор сопоставимых и целое число к. Мне нужно найти «kth» наибольшее сопоставимое в данном массиве. Этот код работает, перебирая вектор, сравнимый за раз, и проверяя, сколько других сопоставимых элементов в векторе больше его. (самый большой элемент в массиве даст 0, второй по величине даст 1). Так, например:
Я прошел вектор:
{ 5,4,7,6,3,8,4,9 }
и тестовые прогоны:
REQUIRE( findKthLargest(kth_ints, 0) == 9);
REQUIRE( findKthLargest(kth_ints, 1) == 8);
REQUIRE( findKthLargest(kth_ints, 3) == 6);
Я передаю первые два, а не третий (кажется, я получаю 4 вместо 6). Я думаю, что я должен использовать указатели здесь, чтобы извлечь фактическое значение из вектора, а не из адреса, но я не знаком с синтаксисом для этого, или где именно мне понадобятся * и &«S.
Проблема в том, что вы используете Диапазон на основе for
петля. Он перебирает значения в контейнере, не давая вам индексы в векторе.
Так в петле i
это ценности из вектора.
Других решений пока нет …