Я тренировался на Хакерранке. Ну, вопрос довольно прост, я приложил это здесь с примером ввода. Когда я запускаю свою локальную машину с пользовательским вводом, она работает как положено. Но пока я работаю на его онлайн-платформе, иногда 2, а иногда и 3 тестовых случая терпят неудачу с исключением из-за тайм-аута. Код ниже здесь кто-нибудь может подсказать, какое улучшение необходимо?
Это решение
public static void main(String[] args) {
int k = 3;
List<Integer> marks = new ArrayList<Integer>();
marks.add(20);
marks.add(20);
marks.add(40);
marks.add(60);
marks.add(20);
marks.add(10);
marks.add(0);
marks.add(100);
System.out.println(numofPrizes(k, marks));
}
public static int numofPrizes(int k, List<Integer> list) {
// Write your code here
Collections.sort(list, Collections.reverseOrder());
List<Integer> str = new ArrayList<Integer>();
AtomicInteger rank = new AtomicInteger(0);
AtomicInteger count = new AtomicInteger(0);
list.stream().forEach(x -> {
if(!str.contains(x)){
rank.getAndIncrement();
}
if(rank.get() <= k && x > 0){
count.getAndIncrement();
}
str.add(x);
// System.out.println("mark " + x + " rank " + rank.get() + " count " + count.get() );
});
return count.get();
}
Вывод:
mark 100 rank 1 count 1
mark 60 rank 2 count 2
mark 40 rank 3 count 3
mark 20 rank 4 count 3
mark 20 rank 4 count 3
mark 20 rank 4 count 3
mark 10 rank 5 count 3
mark 0 rank 6 count 3
3