Недавно я проверил онлайн-тест на кодовость как часть процесса найма. Я получил две простые проблемы, которые нужно решить за 1 час. Для тех, кто не знает кодовости, это сайт онлайн-кодирования, где вы можете решать проблемы стиля ACM на разных языках.
Если у вас 30 минут, проверьте этот http://codility.com/demo/run/
Моим оружием выбора обычно является Java.
Итак, одна из проблем, которые у меня есть, следующая (я постараюсь запомнить, должен был сделать снимок экрана)
Допустим, у вас есть массив A [0] = 1 A [1] = - 1.... A [n] = x
Тогда какой был бы самый умный способ узнать количество раз, когда A [i] + A [j] будет даже там, где я < J
Итак, если мы имеем {1,2,3,4,5} мы имеем 1 + 3 1 + 5 2 + 4 3 + 5 = 4 пары, которые даже
Код, который я написал, был чем-то вроде строк
int sum=0;
for(int i=0;i<A.length-1;i++){
for (int j=i+1;j<A.length;j++){
if( ((A[i]+A[j])%2) == 0 && i<j) {
sum++;
}
}
}
Было еще одно ограничение: если число пар больше, чем 1е9, то оно должно извлекать -1, но позволяет забыть его.
Можете ли вы предложить лучшее решение для этого. Число элементов не будет превышать 1е9 в обычных случаях.
Думаю, я получил 27 очков за вышеупомянутый код (т.е. он не идеален). Codility дает подробную оценку того, что пошло не так, у меня сейчас нет этого.