Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/48: Рейтинг темы: голосов - 48, средняя оценка - 4.77
1 / 0 / 0
Регистрация: 01.07.2016
Сообщений: 13

Задача на собеседовании

01.07.2016, 19:13. Показов 10451. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Являюсь начинающим разработчиком и пытался проходить одно собеседование на позиции стажера Junior Java и после моего предложенного решения мне отказали.
Хотел бы все-таки попытаться решить данную задачу или как минимум то решение, которое хотели от меня интервьювер.

Задча была следующей. Написатть метод merge, который принимаем в качстве параметров два ArrayList a и b.
Данные коллекции можно представить в виде a = [a1, a2, a3, ....] и b = [b1, b2, b3, ...]. По результату выполеения программы
надо получить в коллекции а следующее a= [a1, b1, a2, b2, a3, b3.....]. При этом необходимо написать метод, который
экономный к процессорному времени и памяти.

Я предложил следующий вариант решения задачи:
Java
1
2
3
4
5
6
7
8
9
10
    static void merge(ArrayList a, ArrayList b) {
    int size = b.size();
    for (int i=0; i<size; i++){
    a.add(null);
    }
    for (int i=size; i>0; i--){
    a.set((i<<1)-1,b.get(i-1));
    a.set((i<<1)-2,a.get(i-1));
    }
    }
подскажите как можно сделать лучше?? Хочется попробовать отпрофилировать метод )) но не с чем сравнивать )
Учитывая, что в принципе знаю внутреннюю реализацию этой коллекции, постарался избежать ситуаций копирования массива, который
справа от вставляемого элемента и начал задачу с конца, и по большей части полагаясь на не ресурсоемком методе get.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.07.2016, 19:13
Ответы с готовыми решениями:

Задача на собеседовании
Доброго времени суток, написал задачу с собеседования прошу Вас посмотреть, и указать мои ошибки- недостатки. Код написан в NetBeans вложил...

Задание на собеседовании - в чём ошибка?
Вот что попалось: Отпишите кто может. Всё-таки интересно какие же тут есть ошибки.

Для работающих Java-программистом. Вопросы на собеседовании
Народ (кто работает или уже пытался устроиться), можете поделиться вопросами, которые вам задавал работодатель на собеседовании?

41
0 / 0 / 0
Регистрация: 22.08.2016
Сообщений: 1
20.12.2016, 13:54
Студворк — интернет-сервис помощи студентам
Java
1
2
3
4
5
6
7
8
9
10
11
12
int size = b.size();
        a.ensureCapacity(size * 2);
        for (int i = 0; i < size; i++) {
            a.add(i+size,null);
        }
        int indA = b.size()-1;
        int indB = b.size()-1;
        for (int i = a.size()-1; i >0; i--) {
 
            if(i%2!=0){a.set(i,b.get(indB)); indB--;}
            if(i%2==0){a.set(i,a.get(indA)); indA--;}
        }
Только учу JAVA, замерял время на десятке способов, этот в большом отрыве от остальных, за счет добавления нулевых элементов в конец, а не в начало. При этом не копируются каждый раз элементы стоящие справа, т.к. их нет. Хотя может я в чем-то ошибаюсь.
А на счет capasity. Тут совершенно не влияет на скорость работы,т.к. без него мы увеличиваем массив 2 раза, а с ним 1 раз. Это настолько малые времязатраты, по сравнению с добавлением элементов одного массива в другой, что не играет никакой роли.

Если чушь пишу, поправьте)
0
3 / 3 / 2
Регистрация: 21.12.2016
Сообщений: 8
21.12.2016, 18:13
Цитата Сообщение от Данила37 Посмотреть сообщение
замерял время на десятке способов, этот в большом отрыве от остальных
Самый быстрый алгоритм этот: merge3
Твой вдвое медленнее: merge1
Мой где-то посередине: merge0
Что удивительно, т.к. код мягко говоря костылен:
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    private static
    void merge0(ArrayList a, final ArrayList b) {
        final int size = a.size();
        final int dop = size % 2;
        final int size_h = size + dop;
        final int size_half_l = (size - dop) / 2;
        final int size_half_h = size_h / 2;
        
        //phase 1: reserve memory for part2
        a.ensureCapacity(a.size() + b.size() + 1);
        
        //phase 2: fill part2
        if (dop == 1) a.add(a.get(size - 1)); //bound array
        for (int i = 0; i < size_half_l; i++) {
            int ind1 = size_half_h + i;
            a.add(a.get(ind1));
            a.add(b.get(ind1));
        }
        
        //phase 3: sparse part1
        for (int i = 0; i < size_half_l; i++) {
            int ind1 = size_h - i * 2 - 2;
            int ind2 = size_half_h - i - 1;
            a.set(ind1, a.get(ind2));
        }
        
        //phase 4: fill part1
        for (int i = 0; i < size_half_l; i++) {
            int ind1 = size_h - i * 2 - 1;
            int ind2 = size_half_h - i - 1;
            a.set(ind1, b.get(ind2));
        }
        if (dop == 1) a.set(1, b.get(0));
    }
Сначала увеличиваем размер массива вдвое.
Потом заполняем пустое место данными из вторых половинок обоих массивов, сразу с чередованием. На этом конец выходного массива сформирован, осталось сформировать начало.
В начале массива половина данных (1/4 размера выходного массива) уже скопирована в конец - смело растягиваем первую 1/4 данных ровно до половины выходного массива, затирая уже неактуальные данные.
Ну и в конце распихиваем первую половину второго массива по первой половине выходного массива, между растянутыми элементами.

Получается три цикла по половине входного массива и количество перемещенных элементов равное размеру выходного массива минус один.
Миниатюры
Задача на собеседовании  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2016, 18:13
Помогаю со студенческими работами здесь

Задача на собеседовании
Текст задачи: Создать страницу с 2-мя блоками. В первом блоке ссылки, при нажатии на которые во втором блоке изменяется информация. ...

Задача на собеседовании
дана матрица NxM по ней можно двигаться либо вниз либо вправо найти минимальную сумму элементов находящихся на пути такого движения из...

Задача при собеседовании!
Не могу понять , как ее реализовать (не очень ясна поставлена задача ) помогите разобраться TODO List: Написать приложение списка...

Задача на логическое мышление на собеседовании
Имеется несколько классов. В каждом классе есть функция, внутри которой имеется длинный switch с одними и теми же логическими условиями для...

Задачка на собеседовании
Дали задачку на собеседовании.A,B-булевские переменные. Есть выражение A?B:!B нужно переписать вроде не используя условный оператор If.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
42
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru