#include <iostream>
void sortThree(int res[3]) {
for(int j = 0; j < 2; j++) {
if(res[j] > res[j+1])
std::swap(res[j], res[j+1]);
}
if(res[0] > res[1]) std::swap(res[0], res[1]); // second pass
}
bool lsearch(int src[], int n, int k) {
for(int i = 0; i < n; i++) {
if(src[i] == k) return true;
}
return false;
}
void getThreeLargest(int arr[], int n, int res[3]) {
res[0] = arr[0];
res[1] = arr[1];
res[2] = arr[2];
sortThree(res);
for(int i = 3; i < n; i++) {
// if no repetition wanted
// if(arr[i] > res[0] && !lsearch(res, 3, arr[i])) {
if(arr[i] > res[0]) {
res[0] = arr[i];
sortThree(res);
}
}
}
int main(int argc, char *argv[])
{
int arr[] = {91,21,3,-4,5,2,1,90,9,11};
int res[3];
getThreeLargest(arr, 10, res);
for(int i = 0; i < 3; i++)
std::cout << res[i] << '\n';
return 0;
}
Очень простое решение здесь c-way, чтобы сделать это.Вы можете легко конвертировать его в Java.Сканирование массива O (n).Поскольку небольшой массив для сортировки и поиска содержит только 3 элемента, мы можем легко использовать линейный поиск, чтобы избежать повторения, а сортировка занимает всего 2 сравнения.Это все еще O (n).