Сравним в векторах. Мой код, кажется, не вытягивает правильные значения

#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.

-1

Решение

Проблема в том, что вы используете Диапазон на основе for петля. Он перебирает значения в контейнере, не давая вам индексы в векторе.

Так в петле i это ценности из вектора.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector