Постановка задачи: Найти 10 максимальное число из файла, который содержит миллиарды чиселКак эффективно найти 10 самых больших чисел из миллиардов чисел?
Вход: 97911 98855 12345 78982 ..... .....
Я на самом деле придумал ниже решение, которое имеет
- лучший сложность случая
O(n)
- Когда файл имеет номера в порядке убывания - wors т случай сложности
O(n*10) ~ O(n)
Если файл имеет номера в порядке возрастания - Средняя сложность ~
O(n)
Пространство сложности во всех случаях
Я читаю этот файл с помощью ридера файла и отсортированный массив O(1)
который хранит максимум 10 номеров. Я проверю, является ли currentLine больше, чем самый маленький элемент в массиве. Если это так будет вставляться в правильное положение путем замены.
Scanner sc = new Scanner(new FileReader(new File("demo.txt")));
int[] maxNum = new int[10];
while(sc.hasNext()){
int phoneNumber = Integer.parseInt(sc.nextLine());
if(phoneNumber>maxNum[9]){
maxNum[9] = phoneNumber;
for(int i =9;i>0;i--){
if(maxNum[i]>maxNum[i-1]){
int temp = maxNum[i];
maxNum[i] = maxNum[i-1];
maxNum[i-1] = temp;
}
}
}
}
Я ищу обратную связь, если есть более эффективные способы реализации этого
FYR, 'O (n * 10)' - это то же самое, что и 'O (n)'. – DyZ
Вы можете использовать встроенные методы, чтобы найти максимальное значение, всякий раз, когда вы нашли максимальное значение, сохраните это значение, затем удалите его, а затем повторите его 10 раз. – Null
@Null. .Когда вы построили метод, вы предлагаете .. ему не потребуется несколько проходов и больше итераций. – AdityaReddy