JavaRush /Java блог /Архив info.javarush /Онлайн тесты на работу.
Heavy
30 уровень

Онлайн тесты на работу.

Статья из группы Архив info.javarush
Добрый день. Вообщем решил создать такую тему. Многие конторы при устройстве на работу используют онлайн тестирование. При том условия на англ. языке и вот сегодня я писал такой тест - 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-ая С бинарными деревьями, не читал, жаль времени было
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
MP92 Уровень 39
16 апреля 2016
1-я задача за 1 цикл(правильно ли сделал?):


    static int result(int[] arr) {
        if (arr == null || arr.length < 2) {
            return 0;
        }

        Integer idxMin = null;
        Integer idxMax = null;

        Integer potentialIdxMax = null;

        for (int i = arr.length - 2; i >= 0; i--)
        {
            if (idxMin == null)
            {
                if (arr[i] <= arr[i + 1]) {
                    idxMin = i;
                    idxMax = potentialIdxMax = i + 1;
                }
            } else {
                if (arr[i + 1] > arr[potentialIdxMax]) {
                    potentialIdxMax = i + 1;
                }
                if (arr[i] < arr[idxMin]) {
                    idxMin = i;
                    idxMax = potentialIdxMax;
                }
            }
        }

        return idxMin == null ? 0 : arr[idxMax] - arr[idxMin];
    }
dmarsel Уровень 9
13 апреля 2016
Хотелось бы увидеть условие первой задачи в оригинале.
Насколько я понимаю, необходимо найти наибольшую разность элемента с большим индексом и элемента с меньшим индексом.
Если это так, то ваше решение не проходит для последовательности 9,10,1,5. Ваш ответ 1, а действительный 4.
Решение же barmaleus не пройдет для последовательности 6,10,1,2 по той же причине.
Если решать в лоб, то можно за 2 цикла для каждого элемента найти наименьший до него и сохранять наибольшую разностей. Такой алгоритм возможно и не оптимален, но должен работать для любой последовательности.
barmaleus Уровень 30
8 апреля 2016
Задача 1. Мне кажется сначала можно было найти самый малый элемент в массиве, а вторым действием искать самый большой элемент. И в этом же действии создать переменную, которая будет показывать, во время какой по счету операции сравнения самый большой элемент был найден.