Добрый день. Вообщем решил создать такую тему. Многие конторы при устройстве на работу используют онлайн тестирование. При том условия на англ. языке и вот сегодня я писал такой тест - https://www.hackerrank.com/
Рекомендую всем попробовать. Тем более что JavaRush свои задачи в паблик не приветствует, а там можно рейтинг потом работодателю показать. Но да ладно, не об этом сейчас.
Вообщем у меня было 4 теста, на 90 минут. Решать все не обязательно и написано что лучше решить несколько но качественно. И я бы хотел их обсудить, т.к. не понял как их можно было решить лучше)))))
Задача 1. Написать такое - static int result(int[] arr){}
Дается массив, в котором найти разницу между самым большим элементом и самым маленьким, при том индекс самого маленького должен быть меньше индекса самого большого.
Я решал наверно как все подумали - первый for ищет самый большой элемент и индекс.
Потом второй for ищет самый маленький элемент в элементах до indexMax.
И просто вывожу разницу. И вот это решение не самое оптимальное, набрало всего 3 теста из 10.
Какие есть предложения решить ее лучше? сейчас вот думаю может можно было как то в один фор вложить, но как, если последовательность после max элемента не должна участвовать... или возможно что нибудь типа public static synchronized и т.д. тоже дают плюсы по тестам, не проверял кроме public
Задача 2. написать String[] result(String S, String T){}
Дается две строки. (На javarush похожая была с файлами) Строка T это строка S без некоторых слов. Вернуть массив слов которых не хватает в Т.
Решал так split(t)=" " - результат в set;
split(s)=" ", for и если !set.contains(s[i]) то добавляем в ArrayList result;
потом return result.toArray(new String[0]);
5 теста из 10;
Сначала result был Set - было 3 теста из 10;
У кого еще какие замечания и предложения есть?
Задача 3. я не решал но если кому интересно - дан текст String[] и найти все домены в тексте и вывести на экран. Типа "ляляля http://www.xyz.ru лялл ялл http://ww2.abc.com/sfsflj&dsf?dsfslj/index.html ляляля" вывести "xyz.ru;abc.com"
4-ая С бинарными деревьями, не читал, жаль времени было
Heavy
30 уровень
По решению, я конечно не профессионал, но использовать Integer(целый объект) для хранения числа которое было int — думаю плохое решение, не добавить скорости приложению.
А из книги пока получил выводы — код должен быть понятен интуитивно. Лучше разбивать большой медот на private функции с интуитивно хорошо понятными называниями. Все что больше 5-10 строк — считается большим. Ну и после этих выводов я сам уже более понимаю как оценивать качество кода. Смысл в том, что этот код потом будут читать кучи программиство, которые будут сопровождать приложение в дальнейшем. А если через месяц ты сам в нем не сможешь за пару минут разобраться — значит цена твоего кода не большая.
Насколько я понимаю, необходимо найти наибольшую разность элемента с большим индексом и элемента с меньшим индексом.
Если это так, то ваше решение не проходит для последовательности 9,10,1,5. Ваш ответ 1, а действительный 4.
Решение же barmaleus не пройдет для последовательности 6,10,1,2 по той же причине.
Если решать в лоб, то можно за 2 цикла для каждого элемента найти наименьший до него и сохранять наибольшую разностей. Такой алгоритм возможно и не оптимален, но должен работать для любой последовательности.
PS. Спасибо за комент и за подсказку