Я недавно прошел онлайн-тест на codility как часть процесса найма. Мне дали две простые задачи, которые нужно решить за 1 час. Для тех, кто не знает кодов, это сайт для онлайн-тестирования кода, где вы можете решать проблемы стиля ACM на многих языках.
Если у вас 30 минут или около того, отметьте это http://codility.com/demo/run/
Моим оружием выбора обычно является Java.
Итак, одна из проблем, с которыми я столкнулся, заключается в следующем (я постараюсь вспомнить, должен был сделать снимок экрана)
Допустим, у вас есть массив A [0] = 1 A [1] = - 1 .... A [n] = x
Тогда какой самый разумный способ узнать, сколько раз A [i] + A [j] даже там, где i
Так что, если у нас есть {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++;
}
}
}
Было еще одно ограничение: если количество пар больше 1e9, то оно должно быть повторено -1, но давайте забудем об этом.
Можете ли вы предложить лучшее решение для этого. Количество элементов не будет превышать 1e9 в обычных случаях.
Мне кажется, я получил 27 очков за приведенный выше код (т.е. он не идеален). Codility дает подробную оценку того, что пошло не так, у меня сейчас этого нет.