powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / LeetCode in Java
104 сообщений из 104, показаны все 5 страниц
LeetCode in Java
    #40087631
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Хочу рассказать про новый проект LeetCode-in-Java.

Хочется решить все задачи, которые есть в leetcode и разместить их в одной библиотеке.

Приглашаю присоединиться к проекту всех желающих и создавать pull requests.

Сейчас можно добавлять решения с 20-ой задачи.

Перед коммитом нужно запускать форматировщик кода

mvn com.coveo:fmt-maven-plugin:2.9.1:format -Dstyle=aosp

Ещё нужен junit test для решения.

Планируются ежемесячные релизы.

Репозиторий проекта

https://github.com/javadev/LeetCode-in-Java

Лицензия MIT

Хорошего вам дня!
...
Рейтинг: 0 / 0
LeetCode in Java
    #40087855
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А смысл? Они уже почти все решены.

YouTube Video
...
Рейтинг: 0 / 0
LeetCode in Java
    #40087883
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Никанор Кузьмич#22354038]А смысл? Они уже почти все решены.

Хочется собрать решения для java и сделать их доступными в maven central repository.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40087906
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так на любую задачку они и гуглятся и вообще там любая задачка это комбинации итераций ифов и сортировок. то есть вообще все. там жж нет больше ничего ни нового ни интересного.
шлак.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40087912
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Технически, подобные решения собирались например в RozettaCode
http://www.rosettacode.org/wiki/Category:Programming_Tasks

Там есть коллекция решений наиболее известных проблем почти под все языки.

И если брать не качестом а просто количеством - то можно не писать код
под java а просто портировать его со смежных императивных языков (С++/C#) в Java.

Разумеется при этом теряется некий спортивный интерес. Зачем решать то что уже много раз решено.

Пожалуй исключением было-бы написание таких проблем которые либо красиво решаются на java
а в других языках нерешаются (но я зне знаю таких) либо сама проблема свежа и нова. Но я тоже таких
не знаю.

Для любитей помедитировать haskell/lisp сообщества создавали т.н. коллекции проблем.
Например 99problems . Можно вбить в поиск и найти очень много всего. Но в тех
языках 99 проблем имели особую прелесть. Вы их реализовывали опираясь только на самый
базовый функционал языка. Тоесть библиотеки коллекций например использовать было нельзя.
Их по сути предлагалось создавать.

Есть более интересный обучательный челлендж. Так называемые KOANS. Понятия не имею
как это переводится. Но это некие медитационные задачи которые требуют просто длительного
глядения в 1 исходник и медленного внесения изменений до тех пор пока тесты не зайдут в зеленый
сегмент. При этом для запуска тестов ничего делать не надо. Вы просто нажимаете Ctrl+S в блокноте
и среда все подхватывает сама. Я смотрел KOANS когда изучал Scala и мне в целом очень понравилось.

Вобщем если вам удастся реализовать именно тот самый КОАНС - это будет очень здорово.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40087967
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Задачи решать не нужно. Нужно выбрать решение из имеющихся наиболее быстрое и добавить его в библиотеку.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40087971
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это очень сложное судейство. В рамках 1 модульного теста мы не сможем выбрать самре быстрое.
Нужна конфигурация JMH. Ну и другие правила. Например сколько memory можно жахнуть
чтобы быстрота была самой быстрой в тесте.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088014
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

В leetcode всё это есть. JMH не нужен. Только имплементация, юнит тест и форматирование.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088212
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему ты не пишешь текст задания? Считаешь что по модульному тесту можно всегда понять что требовалось?
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088227
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kolesnikov
Задачи решать не нужно. Нужно выбрать решение из имеющихся наиболее быстрое и добавить его в библиотеку.
Вы то видео смотрели? Просто кажется, что нет. Копилот - это не библиотека кода. Он генерирует код, решающий задачу, по словесному описанию. Если завтра администрация литкода психанет, грохнет базу заданий и придумает 100500 новых задач, ваша библиотека превратится в тыкву. А копилот будет также генерировать решения, как и раньше (причем не только на java, но и еще на десятке языков). Один мой оффлайновый знакомый пробовал копилот на реальном проекте. На реальном проекте - так себе результаты, толку мало. А вот литкодовские задачки он щелкает как орешки. Я, собственно, поэтому так скептически отношусь к вашей идее.

mayton
Так называемые KOANS. Понятия не имею
как это переводится.
Так и переводится. Коан - это такая дзен-буддистская притча. Как правило о том, как какой-нибудь ученик какого-нибудь учителя пришел к просветлению. Хорошее название для набора обучающих примеров, мне нравится
Я нагуглил такую штуку для котлина. Сделано очень круто. Но я хочу такое же для хаскеля, а для хаскеля не нашел

andreykaT
там жж нет больше ничего ни нового ни интересного
Там нет ни нового, ни интересного для тех, кто уже решил энное количество таких задач. Для тех, кто пока не решал, там очень много нового и интересного. Ваш К. О.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088232
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич

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

В github гуглится несколько проектов по haskell-koans. К сожалению многие из них по несколько лет не обновлялись.
Не знаю каков их статус.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088246
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Никанор Кузьмич

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

В github гуглится несколько проектов по haskell-koans. К сожалению многие из них по несколько лет не обновлялись.
Не знаю каков их статус.
Что-то гуглится, да, я видел, просто для котлина есть страничка, которая работает как тот же литкод. Есть описание задания, есть ИДЕ с подстветкой синтаксиса, автодополнением и кнопкой Run. Пишешь решение, запускаешь, она тебе показывает результат - правильно или нет. Вот я такое же хочу, а не просто текст с задачей.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088361
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А почему ты не пишешь текст задания? Считаешь что по модульному тесту можно всегда понять что требовалось?


Лучше на вы. Тест нужен чтобы проверить что код запускается. Данные для теста берутся из leetcode example.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088362
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
смысл вообще этого действа? лит код шляпа ,которая не имеет с реальной разработкой никакой связи
какие то оторваные от жизни задачки ,которые решаются в рамках стрим апи и верх знаний - это умение применять reduce

для кого и для чего это все непонятно- у разработчиков времени нет,студням -решение это не нужно - они должны сами додуматься
хз короче ребят,как по мне вы какой то дичью занимаетесь

а реальным разрабам нужен вот такой лит код - есть приложуха крутящаяся на некоем стенде- и с ней вот всякое происходит
например мемори лик,тайм аут,оптимизация запросов и тд- вот что надо )
чтоб я пришел получичил задачу - вот стенд - подключайся отладчиком- проблема- утечка памяти
решай)
вот такое бы я порешал,а ваши пластилиновые задачки ну оно такое себе
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088403
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так иди в техподдержку. Зарешаешься аж до отвращения.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088431
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В поиске leetCode я не нахожу "Isomorphic Graphs". Почему?
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088483
rsl_tr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
O_79_O,

Автор ещё в добавок назвал, это новым проектом перевод чисел в римский циферблат))
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088496
O_79_O
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov
Так иди в техподдержку. Зарешаешься аж до отвращения.

ну а ты тогда иди в онлайн преподы - нарешаешься задачек типо лид кода до отвращения))
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088516
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"У меня уже есть работа"
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088767
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote=Никанор Кузьмич]А смысл? Они уже почти все решены.

YouTube Video
...
Рейтинг: 0 / 0
LeetCode in Java
    #40088792
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я считаю что в программировании нет проблемы верстки кода.

Есть проблема понимания того что на самом деле хочет заказчик. И прогноза его хотелок в будущем.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40089989
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Я считаю что в программировании нет проблемы верстки кода.

Есть проблема понимания того что на самом деле хочет заказчик. И прогноза его хотелок в будущем.


Только настроили Gradle для форматирования кода и чекстайл.

Свой проект я тоже плагином отформатировал как и leetcode-in-java
...
Рейтинг: 0 / 0
LeetCode in Java
    #40095238
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вышла новая версия библиотеки 1.2.

Добавлено решение задач 16-23.

С уважением, Валентин
...
Рейтинг: 0 / 0
LeetCode in Java
    #40108543
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вышла новая версия библиотеки 1.3.

Добавлено решение задач 24-51.

С уважением, Валентин
...
Рейтинг: 0 / 0
LeetCode in Java
    #40113031
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Появилось описание для задач.

Уже добавлено больше 200 решений.

Хорошей вам пятницы!
...
Рейтинг: 0 / 0
LeetCode in Java
    #40113189
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читать бюлетень изменений как-то не шибко интересно. Ты лучше кидай последние новости строкой.

Например - завершен перевод из римской системы в десятичную.

Кстати. Некоторые наблюдения.
Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
package g0001_0100.s0013_roman_to_integer;

public class Solution {
    public int romanToInt(String s) {
        int x = 0;
        char y;
        for (int i = 0; i < s.length(); i++) {
            y = s.charAt(i);
            switch (y) {
                case 'I':
                    x = getX(s, x, i, 1, 'V', 'X');
                    break;
                case 'V':
                    x += 5;
                    break;
                case 'X':
                    x = getX(s, x, i, 10, 'L', 'C');
                    break;
                case 'L':
                    x += 50;
                    break;
                case 'C':
                    x = getX(s, x, i, 100, 'D', 'M');
                    break;
                case 'D':
                    x += 500;
                    break;
                case 'M':
                    x += 1000;
                    break;
                default:
                    break;
            }
        }
        return x;
    }

    private int getX(String s, int x, int i, int i2, char v, char x2) {
        if (i + 1 == s.length()) {
            x += i2;
        } else if (s.charAt(i + 1) == v) {
            x -= i2;
        } else if (s.charAt(i + 1) == x2) {
            x -= i2;
        } else {
            x += i2;
        }
        return x;
    }
}



Метод

Код: java
1.
getX(s, x, i, 1, 'V', 'X') 



имеет рудиментарный аргумент. Если это будет метод класса или кложура
то тогда и не нужно его каждый раз передавать в статическую функцию.

Или передавай но в рекурсии списком. Тогда нас будет интересовать только голова списка и следующий за ней элемент.

Еще возникает мысль поискать связи между Римской и 5-ричной системой счисления. Я думаю что
перевод Roman => 5x => 10x будет более интересным.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40113243
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем так многословно писать тесты? Этот хамкрест в данном случае - только вредит.

Код: java
1.
2.
3.
4.
5.
public class SolutionTest {
    @Test
    public void isIsomorphic() {
        assertThat(new Solution().isIsomorphic("egg", "add"), equalTo(true));
    }



До Груви со Споком все равно далеко. DSL не получается. Лучше короче писать. Как-то так.

Код: java
1.
        assertTrue(new Solution().isIsomorphic("egg", "add"));
...
Рейтинг: 0 / 0
LeetCode in Java
    #40113246
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Да и создание инстанса объекта тут не за чем. Обычная статическая функция, которую можно под импорт спрятать.
Код: java
1.
assertTrue(isIsomorphic("egg", "add"));
...
Рейтинг: 0 / 0
LeetCode in Java
    #40113248
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А зачем так многословно писать тесты? Этот хамкрест в данном случае - только вредит.

Код: java
1.
2.
3.
4.
5.
public class SolutionTest {
    @Test
    public void isIsomorphic() {
        assertThat(new Solution().isIsomorphic("egg", "add"), equalTo(true));
    }



До Груви со Споком все равно далеко. DSL не получается. Лучше короче писать. Как-то так.

Код: java
1.
        assertTrue(new Solution().isIsomorphic("egg", "add"));



assertTrue/assertEquals не очень нравятся. assertThat + equalTo лучше читаются.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40113249
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
mayton,

Да и создание инстанса объекта тут не за чем. Обычная статическая функция, которую можно под импорт спрятать.
Код: java
1.
assertTrue(isIsomorphic("egg", "add"));



Статики не нравятся, лучше создавать объекты.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40113251
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kolesnikov
забыл ник
mayton,

Да и создание инстанса объекта тут не за чем. Обычная статическая функция, которую можно под импорт спрятать.
Код: java
1.
assertTrue(isIsomorphic("egg", "add"));



Статики не нравятся, лучше создавать объекты.

Кому лучше? Разве что объектам.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40113252
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
Valentin Kolesnikov
пропущено...


Статики не нравятся, лучше создавать объекты.

Кому лучше? Разве что объектам.


Не хочется заменять обычные методы на статики.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40113274
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kolesnikov
забыл ник
пропущено...

Кому лучше? Разве что объектам.


Не хочется заменять обычные методы на статики.


Я понимаю о чем вы. Я к тому что это bias мышления. Мол так не правильно. А почему? А не знаю, так в книге по ООП написано, все должно быть объектом. А то что эта сущность по факту выдуманная, никого не волнует.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40115388
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote=Никанор Кузьмич]А смысл? Они уже почти все решены.

YouTube Video
...
Рейтинг: 0 / 0
LeetCode in Java
    #40115952
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Game Of Life Конвея может быть оптимизирована.

https://github.com/javadev/LeetCode-in-Java/blob/main/src/main/java/g0201_0300/s0289_game_of_life/Solution.java

Предлагаю рассмотреть индексные структуры наподобие Q-Tree для отслеживания
всяких редких скоплений клеток.

И параллелизм. Если получится. Для очень больших досок.

Еще интересна такая задача над которой я когда-то думал. Как детектировать
что мир пришел в некое стационарное состояние и остались одни осцилляторы
и больше никаких существенных изменений не будет.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40116000
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача по реверсу целого числа в десятичной системе.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public int reverse(int x) {
        long rev = 0;
        while (x != 0) {
            rev = (rev * 10) + (x % 10);
            x /= 10;
        }
        if (rev > Integer.MAX_VALUE || rev < Integer.MIN_VALUE) {
            return 0;
        }
        return (int) rev;
    }


В ней нет вообще ничегошеньки-ничего чтобы было интересно ее решать. Мы можем взять 100 императивных
языков и релиз кода будет примерно одинаков.

А что было-бы интересно? Интересно было-бы делать эту задачу на ассемблере. Там есть команда DIV
которая сразу получает и делимое и остаток.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40116001
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что я этим хочу сказать. Что есть задачи - вкусные для реализации их в Java. Например встроенный
в Java интерпретатор Lisp или Scheme. (Уборщик мусора уже есть).

А деление целых чисел - вообще ни разу не интересно. Тупо просто. Хотя я понимаю почему кому-то
интересно коллекционировать код. Но собирать всё подряд без разбора - это-же смертельно скучно.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40116053
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Мне эта задача нравится. Она не сложная и решение легко запомнить.

https://github.com/javadev/LeetCode-in-Java/tree/main/src/main/java/g0301_0400/s0307_range_sum_query_mutable

Код: 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.
35.
36.
37.
38.
public class NumArray {
    private int[] nums;
    private int sum;

    public NumArray(int[] nums) {
        this.nums = nums;
        sum = 0;
        for (int num : nums) {
            sum += num;
        }
    }

    public void update(int index, int val) {
        sum -= nums[index] - val;
        nums[index] = val;
    }

    public int sumRange(int left, int right) {
        int sumRange = 0;
        if ((right - left) < nums.length / 2) {
            // Array to sum is less than half
            for (int i = left; i <= right; i++) {
                sumRange += nums[i];
            }
        } else {
            // Array to sum is more than half
            // Better to take total sum and substract the numbers not in range
            sumRange = sum;
            for (int i = 0; i < left; i++) {
                sumRange -= nums[i];
            }
            for (int i = right + 1; i < nums.length; i++) {
                sumRange -= nums[i];
            }
        }
        return sumRange;
    }
}
...
Рейтинг: 0 / 0
LeetCode in Java
    #40116059
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я всё таки хочу понять какую цель обозначает LeetCode. Варианты:

1) Написать понятную реализацию алгоритма.
2) Написать краткую реализацию алгоритма (signle-line, может быть наподобие APL, или однострочных Python/Bash скриптов)
3) Написать оптимальную по времени работы. Последнее - самое сложное и интересное.

В методе

Код: java
1.
int sumRange(int left, int right)



мы можем выйти на сложность O(1) если есть необходимость но у нас допустим просядет update().
...
Рейтинг: 0 / 0
LeetCode in Java
    #40116105
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

автор1) Написать понятную реализацию алгоритма.
2) Написать краткую реализацию алгоритма (signle-line, может быть наподобие APL, или однострочных Python/Bash скриптов)
3) Написать оптимальную по времени работы. Последнее - самое сложное и интересное.


Для метода
Код: java
1.
int sumRange(int left, int right)

есть два решения: вычисление и с оптимизацией.

Мы используем оба в зависимости от условия

Код: java
1.
 if ((right - left) < nums.length / 2)



Для меньших отрезков первый метод, для больших - второй.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40116125
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот у меня есть такая (эвристическая пока) идея о том что данные обычно больше читаются чем пишутся.

Тоесть чтение оптимизировать - гораздо важнее. Сумма - чтение. Update - запись.

И вопрос - нам достаточно того уровня оптимизации что уже заложен? Или может мы можем еще
улучшить sumRange?
...
Рейтинг: 0 / 0
LeetCode in Java
    #40116266
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

вот даже интересно, что именно в этом великолепном "объекте" ты собрался оптимизировать?
С учетом того, что я к счастью, понятия не имею о том, кто такая java, можешь, в плане моего просвещения,
ответить всего на два вопроса:

1) по какой причине конструктор этого объекта не должен грохнуться в момент своего вызова?
2) На каком, собственно, основании кто-то собрался, и вообще можно верить в тот результат,
который будет возвращать метод sumRange?
С какого Марса приедут чиселки?

(Для чего такие объекты, я спрашивать не буду. Наверно так надо.)
...
Рейтинг: 0 / 0
LeetCode in Java
    #40116273
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я выше спросил свой вопрос. Я не понимаю целей которые стоят перед LeetCode.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40116371
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вышла новая версия библиотеки 1.4 .

- Added tasks 52-334
- Introduced unit tests for sql
- Added readme.md for tasks

С уважением, Валентин
...
Рейтинг: 0 / 0
LeetCode in Java
    #40116953
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эта задача тоже нравится.

Решение трудно запомнить, интересен сам код.

https://github.com/javadev/LeetCode-in-Java/tree/main/src/main/java/g0201_0300/s0273_integer_to_english_words

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
public class Solution {
    private String[] ones = {
        "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine "
    };
    private String[] teens = {
        "Ten ",
        "Eleven ",
        "Twelve ",
        "Thirteen ",
        "Fourteen ",
        "Fifteen ",
        "Sixteen ",
        "Seventeen ",
        "Eighteen ",
        "Nineteen "
    };
    private String[] twenties = {
        "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety "
    };
    private String zero = "Zero";
    private String hundred = "Hundred ";
    private String thousand = "Thousand ";
    private String million = "Million ";
    private String billion = "Billion ";

    public String numberToWords(int num) {
        if (num == 0) {
            return zero;
        }
        StringBuilder sb = new StringBuilder();
        processThreeDigits(sb, num / 1_000_000_000, billion);
        processThreeDigits(sb, num / 1_000_000, million);
        processThreeDigits(sb, num / 1_000, thousand);
        processThreeDigits(sb, num, null);
        return sb.toString().trim();
    }

    private void processThreeDigits(StringBuilder sb, int input, String name) {
        int threeDigit = input % 1000;
        if (threeDigit > 0) {
            if (threeDigit / 100 > 0) {
                sb.append(ones[threeDigit / 100 - 1]);
                sb.append(hundred);
            }
            if (threeDigit % 100 >= 20) {
                sb.append(twenties[(threeDigit % 100) / 10 - 2]);
                if (threeDigit % 10 > 0) {
                    sb.append(ones[threeDigit % 10 - 1]);
                }
            } else if (threeDigit % 100 >= 10 && threeDigit % 100 < 20) {
                sb.append(teens[threeDigit % 10]);
            } else if (threeDigit % 100 > 0 && threeDigit % 100 < 10) {
                sb.append(ones[threeDigit % 10 - 1]);
            }
            if (name != null) {
                sb.append(name);
            }
        }
    }
}
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120545
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача сложения двух чисел не использую операторы + и -.

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
package g0301_0400.s0371_sum_of_two_integers;

// #Medium #Top_Interview_Questions #Math #Bit_Manipulation

public class Solution {
    public int getSum(int a, int b) {
        int ans = 0;
        int memo = 0;
        int exp = 0;
        int count = 0;
        while (count < 32) {
            int val1 = a & 1;
            int val2 = b & 1;
            int val = sum(val1, val2, memo);
            memo = val >> 1;
            val = val & 1;
            a = a >> 1;
            b = b >> 1;
            ans = ans | (val << exp);
            exp = plusOne(exp);
            count = plusOne(count);
        }
        return ans;
    }

    private int sum(int val1, int val2, int val3) {
        int count = 0;
        if (val1 == 1) {
            count = plusOne(count);
        }
        if (val2 == 1) {
            count = plusOne(count);
        }
        if (val3 == 1) {
            count = plusOne(count);
        }
        return count;
    }

    private int plusOne(int val) {
        return (-(~val));
    }
}
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120571
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так было-бы интереснее. Длинная арифметика.

Код: java
1.
public int[] getSum(int[] a, int[] b) 
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120606
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov
Задача сложения двух чисел не использую операторы + и
- .


private int plusOne(int val) {
return ( - (~val));
}


это что за фигня?
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120616
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
am_sasa
Valentin Kolesnikov
Задача сложения двух чисел не использую операторы + и
- .


private int plusOne(int val) {
return ( - (~val));
}


это что за фигня?


https://www.baeldung.com/java-bitwise-operators
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120626
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прибавляет единичку.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120638
am_sasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
оператор минус не использовать!
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120644
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопрос - к чему все это и зачем - так и остался без ответа..
вот это, например,

Valentin Kolesnikov
Задача сложения двух чисел не использую операторы + и -.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
package g0301_0400.s0371_sum_of_two_integers;

// #Medium #Top_Interview_Questions #Math #Bit_Manipulation

...
    private int sum(int val1, int val2, int val3) {
        int count = 0;
        if (val1 == 1) {
            count = plusOne(count);
        }
        if (val2 == 1) {
            count = plusOne(count);
        }
        if (val3 == 1) {
            count = plusOne(count);
        }
        return count;
    }

    private int plusOne(int val) {
        return (-(~val));
    }
...


немедленно после первого написания могло бы выглядеть так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    private int sum(int val1, int val2, int val3) {
        int count = 0;

        count = plusOneChecked(val1, count);
        count = plusOneChecked(val2, count);
        count = plusOneChecked(val3, count);

        return count;
    }

    private int plusOneChecked(int icheck, int val) {
        return icheck == 0 ? val : -(~val) ;
    }



Или даже как-то так (это уже вопрос "философии")
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
    
       private int sum(int val1, int val2, int val3) {

         return plusOneChecked(val3, plusOneChecked(val2, plusOneChecked(val1, 0)));
    }

    private int plusOneChecked(int icheck, int val) {
        return icheck == 0 ? val : -(~val) ;
    }
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120681
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы на системотехнике оптимизировали сумматор. Там кажется вводится параллелизм для групп 4х
битов (квартет) и суммирование идёт группами. 4х4 = 16. Булева функция. 8 входов и 5 выходов.
4 бита результат и бит переноса в следующую группу.

Разумеется сабж - не решение Литкодов а просто ускорение последовательной операции суммы с переносом.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120706
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оптимизация, там где речь про скорость - сам по себе мутный, привязанный к исторически случайной частности вопрос,
и улучшения того, что называют "качеством кода" не предполагает.

"Улучшение" кода - это обычно что-то другое - либо повышение читаемости, либо появление такого качества, которое не обязательно связано со скоростью, а, как вариант, с увеличением степени полезного повторного использования кода,
например - расширением области или удобства применимости конкретного фрагмента кода на другие типы данных,
по отношению к которым требуется алгоритм того же сорта.

способ потенциально ускорить - это, например, дописать private static int plusOneChecked
Но насчет того - несомненно ли это улучшение - до вечера пятницы вряд ли удастся договориться.

Как-то так.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120714
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В аннотации проекта написано

Java Solution for LeetCode algorithm problems, continually updating.

Тоесть - решение как таковое. Отлично. Тогда то что ты предлагаешь - это рефакторинг.
Рефакторинг - полезный. Я за него голосую +1 и надеюсь Валентин его затащит в свой
код.

Вообще конечно жаль что проект поднят именно под Java. Красивых Single-Line solutions
тут не сделаешь. Вот если-бы была Scala - то даааа.

Короче дальше идём под флагом улучшений кода в части хотя-бы уменьшения букв.
Конечно до языка APL доходить не будем, но такой рекурсивный реплейсмент - я думаю
пойдет.

Главное чтоб студент на собеседовании смог пояснить что это означает. Я разумеется
предполагаю что он зашел в гитхаб и стянул решение себе.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120726
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

...
Тогда то что ты предлагаешь - это рефакторинг.
...

Не-не.
Рефакторинг не может начаться раньше того, как ты дошел, или тебя довели
до состояния полного разрушения личности перед лицом невыполнимости задачи.

Тогда, чтобы не убить кого-нибудь, или не убиться самому, ты придумываешь "рефакторинг"
для укрепления нервной системы, в надежде, что вдруг, после переставления шашек жизнь сама наладится.
Рефакторинг, это когда понятия "верх" и "низ" у программы давно перепутались, и уже никто не знает, где они были.

PS
Я ничего не предлагаю вообще.
Я лишь следую завету, гласящему, что первым пером написанная программа еще не написана.
Ее необходимо переписать после этого не менее двух раз (по Бруксу двух, а чуть более молодые товарищи говорят - "мы не знаем, сколько раз потребуется")
Это не рефакторинг.
Это нормальный , без кардилогической скорой помощи, такой процесс встречного движения "сверху вниз" и "снизу вверх",
в результате которого самому создателю более менее становится ясно - где же у программы верх, а где низ.

Рефакторинг же возникает только после того, как программа признается негодной к работе во вновь обнаруженных обстоятельствах.

При нормальном движение - программа в каждой своей инкарнации - годная , но по тем или иным причинам - следующая версия годнее предыдущей.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120732
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо. Но я не согласен с термином оптимизация . В моём понимании
оптимизация - измеряема. Тоесть мы можем посчитать speedup приложения
после процесса о.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120734
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby,
Не. Я думаю что рефакторинг это как восстановление днк во время сна человека.
Это планомерный процесс улучшения продукта.
Это как выделение 10 проц времени на саморазвиие. Или 5 проц денег на рекламу продукта.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120736
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Книгописатели (толи Фаулер толи Боб я их путаю) говорят что рефакторинг нельзя начинать
пока нет модульных тестов.

Поскольку там есть какое-то базовое покрытие https://github.com/javadev/LeetCode-in-Java/blob/main/src/test/java/g0301_0400/s0371_sum_of_two_integers/SolutionTest.java
и вообще я знаю что Валентин - человек скурпулёзный и заведомо думает о тестах то я думаю что рефакторить
можно. И то улучшение которое предлагает booby - это есть рефакторинг
нацеленный на уменьшение количества строк кода с сохранением читаемости.
Если какие-то ветви алгоритма не закрыты зеленым маркером coverage - то
можно просто добавить больше кейсов.

По поводу читаемости - можно голосовать. Я другого способа не знаю.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120737
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

у меня рефлекс устойчивый выработался - когда я включаю кино на ютубе, и человек сразу после представления заявляет
- "Я люблю заниматься оптимизацией" - то для меня обычно этого достаточно, чтобы дальше не смотреть.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120738
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
...
нацеленный на уменьшение количества строк кода с сохранением читаемости.
...

Нет .
Конкретно в данном случае это самый что ни на есть "школьный" пример выделения повторно применяемого кода в самостоятельную функцию.
Ввиду его очевидной повторности, а значит, полезности такого выделения.
Все прочее - случайный (почти) результат этого процесса.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120739
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby, поздно друг. Ты представлен к медали. Тебя ждут памятные подарки и почетная грамота.

P.S. Чудак-человек. Сделал полезное дело и ... отнекивается. Я дескыть "глаз пристелямши..." Ну йомайо...
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120747
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оно, спасибо, конечно...
к "пристрелянному глазу" имею тенденцию скорее с пиететом чаще, чем со смехом относится.

Мой глаз в этом плане всегда был недостаточно тренирован.

И особенно с учетом знания физиологии зрения - картинка всегда создается урывочными концентрациями
внимания на отдельных точечных фрагментах.
Чтобы понять, что же за картина - надо несколько раз посмотреть и обнаружить при следующих просмотрах то, что не видел в предыдущих.
Нетренированный глаз вообще не знает, с какого конца рассматривать, и, чем больше тренирован, тем выше вероятность, что наработанная траектория движения при просмотре, и выбор точек останова дадут больше информации для принятия решения.
Но не смотреть повторно - значит, скорее всего, так и оставить картину без ясного понимания, что же увидел или написал.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120755
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
PetroNotC Sharp,

у меня рефлекс устойчивый выработался - когда я включаю кино на ютубе, и человек сразу после представления заявляет
- "Я люблю заниматься оптимизацией" - то для меня обычно этого достаточно, чтобы дальше не смотреть.
)))
Ну пусть любит. Только ограничивать себя надо.
Я вот тоже водку люблю).
Но если он маньяк оптимизатор то согласен))
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120866
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуем провести еще одну не оптимизацию и не рефакторинг с целью избавления от умения вычислять обратное по сложению число.
В сумматоре, в исходной версии которого первый и второй параметры - значения складываемых разрядов, а третий - входящий знак
переноса, история разбивается на два случая по отношению к полученному знаку переноса.

1) пусть он ноль, сохраняя порядок входных параметров из исходной версии sum, видим следующее
abcarry_in carry_out r00000010011000111010
выходные значения вычисляются так:
carry_out = a & b;
r = a ^ b;
или, с использованием ранее вычисленного carry_out:
r = (~carry_out) & (a | b);

2) при carry_in = 1 :
abcarry_in carry_out r00101011101011011111
то есть
carry_out = a | b;
r = (a & b) | (~(a | b));
или, с использованием ранее вычисленного carry_out:
r = (~carry_out) | (a & b);

В обоих случаях возврат, эквивалентный исходному, формируется как
return ((carry_out<<1) | r);

с сохранением порядка смысловых параметров и результата получаем примерно такое:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
private static int  sum( int a, int b, int carry_in ) {
      int x;
     
     switch (carry_in) {        
          case 0:
              x = ((a & b) << 1) | (a ^ b);
              break;
         default:
              x = ((a | b) << 1) | (( ~(a | b)) | (a & b));
     }
     return x;
}



избавляться от plusOne для вычисления exp и count ( exp = plusOne(exp); count = plusOne(count);) можно по разному:

для count вместо сложения можно перейти к сдвигу на 1 разряд влево, а от exp, может быть, я предпочел бы вообще отказаться
и перешел бы к заполнению битов предварительного результата в обратном порядке,
сдвигая его на 1 влево и всегда заполняя младший разряд.
Тогда последней операцией при слежении за младшим разрядом должен стать вызов одного из подходящих под "не использовать плюс и минус" вариантов функции обращения битов.

Вероятно, я бы сменил тактику со слежения за младшим битом на слежение за старшим,
путем путем высекания (a <<1) & 2147483147, cдвигая налево текущее значение пока сдвигаемый
также налево на единицу count не превысит 2147483147,
тогда реверсный вариант формирования результата автоматически давал бы правильный выходной результат.

Выписывать полный код мне неохота.
Прошу прощения.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120876
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Последнюю часть мутно написал.
В общем, перед слежением за старшим разрядом, надо предварительно развернуть циклическим
сдвигом на 32 разряда оба слагаемых. Тогда пазл соберется правильно от старших разрядов.
Или оставить все как есть при слежении за младшим, и тем же сдвигом вращать только результат.
exp исчезнет в обоих случаях.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120877
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Так было-бы интереснее. Длинная арифметика.

Код: java
1.
public int[] getSum(int[] a, int[] b) 



Есть такой проект.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120981
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kolesnikov
mayton
Так было-бы интереснее. Длинная арифметика.

Код: java
1.
public int[] getSum(int[] a, int[] b) 



Есть такой проект.

По сумме двух целых чисел.

Насколько я понимаю этот стикер,

Код: java
1.
// #Medium #Top_Interview_Questions #Math #Bit_Manipulation



задача может быть задана на собеседовании? Или выдана в качестве тестового задания.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120987
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот как работают сумматоры в системотехнике http://texnic.ru/tools/cif_ms/8.html

В топике что-бы мы не придумывали - мы создаем имплементацию последовательного сумматора.
Кстати мой вариант с параллельным суммированием квартетов битов тут не показан.
Зато показан абсолютно параллельный сумматор (комплексность последнего правого
элемента просто поражает воображение).
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120993
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

сумматоры на java моделировать, не сильно благодарная задача с первого взгляда, имхо.

городить объекты там, где в других языках достаточно выходных параметров - сердце кровью обливается.
В ее варианте "безопасной объектно-ориентированности" нужно долго думать, чтобы что-то не смешное на объектах нагородить.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40120999
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Программировать на интерпретаторах - себя не уважать".
Или умерьте осетра категоричности или выжгите калёным железом всё, начиная с /bin/sh и SIM-карт.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40121003
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Valentin Kolesnikov
пропущено...


Есть такой проект.

По сумме двух целых чисел.

Насколько я понимаю этот стикер,

Код: java
1.
// #Medium #Top_Interview_Questions #Math #Bit_Manipulation



задача может быть задана на собеседовании? Или выдана в качестве тестового задания.


Это список тэгов. Обычно спрашивают не само решение а то как ты его объясняешь.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40121005
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такую задачу могут спросить. Нужно понимать как хранятся данные.

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
package g0201_0300.s0208_implement_trie_prefix_tree;

// #Medium #Top_100_Liked_Questions #Top_Interview_Questions #String #Hash_Table #Design #Trie

@SuppressWarnings("java:S1104")
public class Trie {
    private TrieNode root;
    private boolean startWith;

    public Trie() {
        root = new TrieNode();
    }

    // Inserts a word into the trie.
    public void insert(String word) {
        insert(word, root, 0);
    }

    private void insert(String word, TrieNode root, int idx) {
        if (idx == word.length()) {
            root.isWord = true;
            return;
        }
        int index = word.charAt(idx) - 'a';
        if (root.children[index] == null) {
            root.children[index] = new TrieNode();
        }
        insert(word, root.children[index], idx + 1);
    }

    // Returns if the word is in the trie.
    public boolean search(String word) {
        return search(word, root, 0);
    }

    public boolean search(String word, TrieNode root, int idx) {
        if (idx == word.length()) {
            startWith = true;
            return root.isWord;
        }
        int index = word.charAt(idx) - 'a';
        if (root.children[index] == null) {
            startWith = false;
            return false;
        }

        return search(word, root.children[index], idx + 1);
    }

    // Returns if there is any word in the trie
    // that starts with the given prefix.
    public boolean startsWith(String prefix) {
        search(prefix);
        return startWith;
    }
}


class TrieNode {
    // Initialize your data structure here.
    public TrieNode[] children;
    public boolean isWord;

    public TrieNode() {
        children = new TrieNode[26];
    }
}
...
Рейтинг: 0 / 0
LeetCode in Java
    #40121006
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я обычно так делал.

Код: java
1.
public List<TrieNode> children;



И пустую коллекцию создавал. Иначе во всех листовых узлах будет 26 пустых элементов.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40121046
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov
...
... умерьте осетра ...

осетры разные нужны, и многие из них даже важны.
Но идеально каждый осетр плавает в своем специфическом контексте.
Осетр в бассейне неправильного размера может выглядеь вполне нелепо.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40121049
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
... Иначе во всех листовых узлах будет 26 пустых элементов.

В этом соль.
26 - исходный размер узла перворожденного трай - по числу букв латинского алфавита.

Это старейшая из поисковых структур, конца 50х годов 20го века изобретения.
К 80м стандартным стал узел на 255 элементов, по потом, с появлением юникода было решено,
что трай целиком негодная идея для современного использования - 1000 элементов на узел даже для Intel Pentium P5 многовато.

Между тем, в последние лет 10, то здесь то там, появляются попытки построить поисковые индексы для субд на той или иной модификации трай.

То есть, структура реально вновь ожила и "спросить могут"...
...
Рейтинг: 0 / 0
LeetCode in Java
    #40121054
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потери еще могут быть за счет длинных цепочек которые не ветвятся. Можно было-бы отказаться от
хранения 1 символа на узел и сделать string. Будет сложнее смёрживать новые слова, зато хранение
будет компактнее.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40121083
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
... Можно было-бы отказаться от
хранения 1 символа на узел и сделать string....

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

В целом, с этим обходятся.
Для in-memory database есть случаи живого применения, там используемые вариации зовут Patricia Trie и Heigh Optimized Trie.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40124377
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вышла новая версия библиотеки 1.5.

- Added tasks 335-503
- Improved generatemd tool

С уважением, Валентин
...
Рейтинг: 0 / 0
LeetCode in Java
    #40124471
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересная задача 349.

349. Intersection of Two Arrays

Easy

Given two integer arrays nums1 and nums2, return an array of their intersection. Each element in the result must be unique and you may return the result in any order.

Example 1:

Input: nums1 = [1,2,2,1], nums2 = [2,2]

Output: [2]

Example 2:

Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]

Output: [9,4]

Explanation: [4,9] is also accepted.

Constraints:

1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000

Решение

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        boolean[] occ = new boolean[1001];
        for (int i = 0; i < nums1.length; i++) {
            occ[nums1[i]] = true;
        }
        List<Integer> res = new ArrayList<>();
        for (int i = 0; i < nums2.length; i++) {
            if (occ[nums2[i]]) {
                occ[nums2[i]] = false;
                res.add(nums2[i]);
            }
        }
        int[] result = new int[res.size()];
        for (int i = 0; i < res.size(); i++) {
            result[i] = res.get(i);
        }
        return result;
    }
}
...
Рейтинг: 0 / 0
LeetCode in Java
    #40124482
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С такими ограничениями

Код: java
1.
2.
3.
4.
Constraints:

1 <= nums1.length, nums2.length <= 1000
0 <= nums1, nums2[i] <= 1000


не особо интересно. Какая-то детская игра.

Если-б я собеседовал - то сказал-бы - [i]А давайте сейчас предположим что число у нас - диапазона int и оба
массива по 2 млрд.
И мне не надо решение в виде кода. А просто - рассказать как нужно искать пересечение
и какие могут быть по ходу решения проблемы.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40124485
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

это ваще не интересно, хоть два триллиарда.

Сортируешь оба массива и мержишь, отбрасывая наименьшее неравное и выбрасывая в результирующий поток одно из равных.
Так-то класс на шестой-седьмой класс средней школы задача в части мержа.
Загвоздка в этом возрасте может быть только в том, как достаточно быстро отсортировать оба массива.

В показанной "детской игре" тоже есть сортировка, кстати, а-ля радикс сорт.
Если известно, что массивы сильно не равны, то выгоднее сортировать только тот, который много меньше другого,
с любым вариантом поиска по сортированному - от бинарного до индексного.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40124486
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если форсировать FIRST_ROWS (как в оракле) то я-бы предположил что и достаточно только один сортировать.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40124487
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, строить из меньшего любого рода бинарное дерево поиска - это простой способ обеспечения уникальности элемента в выходном потоке. А к мержу надо пристраивать флаг типа "значение уже уехало в выходной поток".

насчет один сортировать или оба - это от размера задачи может оказаться сильно зависимым, и местополежения флага "этот уже выброшен" .
два много.улиардных массива можно внешней сортировкой отсортировать, а у самого мержа нет требований по памяти.
Держать даже лишь один сортированный массив в памяти может оказаться в конце концом излишне дороговато.
На совсем больших объемах чистый merge-sort может оказаться вообще единственным разумным заходом.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40124488
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На низко-кардинальных данных можно всё собрать подсчетом. Опять-же если мы хотя-бы обладаем
примерно сведеньями о том какая гистограмма данных к нам прилетит.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40124490
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

"подсчет" - для низкокардинальных в смысле количества уникальных значений наборов - это sort group by.
Это ходьба по кругу - если заранее известно, что хотя бы один из наборов достоверно такой - то естественно переходим формированию единственного ведущего множества.
А если заранее понятно, что все равно на диск падать и в память не попадаем - то просто merge sort два раза + merge distinct values
...
Рейтинг: 0 / 0
LeetCode in Java
    #40130546
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже 800 задач добавлено.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40130915
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вышла новая версия библиотеки 1.6.

- Added tasks 504-810
- Improved generatemd tool

С уважением, Валентин
...
Рейтинг: 0 / 0
LeetCode in Java
    #40131795
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересная задача

529. Minesweeper

Let's play the minesweeper game ( Wikipedia, online game )!

https://github.com/javadev/LeetCode-in-Java/tree/main/src.save/main/java/g0501_0600/s0529_minesweeper

Решение:

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
public class Solution {
    private static final int[][] DIRECTION = {
        {1, 0}, {-1, 0}, {0, 1}, {0, -1}, {-1, -1}, {-1, 1}, {1, -1}, {1, 1}
    };

    private int row;
    private int col;

    private void dfs(char[][] board, int row, int col) {
        if (row < 0 || row >= this.row || col < 0 || col >= this.col) {
            return;
        }
        if (board[row][col] == 'E') {
            int numOfMine = bfs(board, row, col);
            if (numOfMine != 0) {
                board[row][col] = (char) (numOfMine + '0');
                return;
            } else {
                board[row][col] = 'B';
            }
            for (int[] i : DIRECTION) {
                dfs(board, row + i[0], col + i[1]);
            }
        }
    }

    private int bfs(char[][] board, int row, int col) {
        int numOfMine = 0;

        for (int[] i : DIRECTION) {
            int newRow = row + i[0];
            int newCol = col + i[1];
            if (newRow >= 0
                    && newRow < this.row
                    && newCol >= 0
                    && newCol < this.col
                    && board[newRow][newCol] == 'M') {
                numOfMine++;
            }
        }

        return numOfMine;
    }

    public char[][] updateBoard(char[][] board, int[] c) {
        if (board[c[0]][c[1]] == 'M') {
            board[c[0]][c[1]] = 'X';
            return board;
        } else {
            row = board.length;
            col = board[0].length;
            dfs(board, c[0], c[1]);
        }
        return board;
    }
}
...
Рейтинг: 0 / 0
LeetCode in Java
    #40135494
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1000 задач добавлено.

👍🎂🎉🔥😎
...
Рейтинг: 0 / 0
LeetCode in Java
    #40136162
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov,
а какой смысл я не пойму? там же в дискусе все решения есть,а в интернетах есть решения с объяснениями -почему так или этак

прихожу к выводу ,что ваш проект для людей,которые не осилили интрефейс LeetCode и параллельно забанены в гугле)))
...
Рейтинг: 0 / 0
LeetCode in Java
    #40136354
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep,

Хочется решить все задачи, которые есть в leetcode и разместить их в одной библиотеке.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40136622
adminDontSleep
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valentin Kolesnikov
adminDontSleep,

Хочется решить все задачи, которые есть в leetcode и разместить их в одной библиотеке.

а вы не рассматриваете тот факт ,что задачи могут обновляться и пересматриваиться, а так же прибавляться кратно

В чем сакральный смысл вашей библиотеки?
Этот ресурс нужен для проверки своих знаний алгоритмов и структур данных

Я бы вас понял если бы на пальцах обьясняли почему вот так и так,какое время поиска получаеся и почему и тд
но у вас голое решение - которое даже не конкурирует с Discuss

фактически ваша либа перебивается любым парсером правильно натравленым на /discuss

Валентин не занимайтесь вы ерундой - это никому не надо и не будет востребовано,если хотите качественный ресурс - вам нужно все решения откоментить и обосновать,привести примеры плохих решений ,все это как привести к общему знаменателю
+ добавить ссылки на конкретные страницы книг - где описываются данные решения
вот тогда ваша идея заиграет новыми красками - сейчас же это просто никому не нужно в таком виде

пс тем более это никому не нужно на джва ибо тут уже реализованы и сортировки и прочие алгоритмические чудеса)
...
Рейтинг: 0 / 0
LeetCode in Java
    #40136627
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему-же. Ресурс хороший.

Просто вот хочется по каждой задаче иметь хотя-бы 2-3 версии решения с комментариями.
Например одна - оптимизирована по памяти. Другая там ... еще по какому-то критерию.
Например по o(n).

Вобщем такой вариант "лобового" решения когда задача решена и точка - неинтересен.
Где дискурс? Это безальтернативный вариант?

По поводу Java. Несколько лет назад я искал FFT (быстрое преобразование Фурье) и нашел
кодо-генератор который решает эту задачу для целой линейки языков. Тоесть алгоритм стоял
во главе решения а язык просто был бэкендом этого алгоритма.

Вот если-бы подумать в этом направлении? Есть алгоритм? - Можно сгенерить Java/Kotlin/Python
по шаблону. Это было-бы интересно.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40136637
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
...
тем более это никому не нужно...

(и mayton тоже)
Вы оба путаете личную историю и общественную пользу.
Некто решил 500 задач с литкода, а кто-то целую тысячу.
Вот и все.

Топикстартера несколько раз провоцировали на какое-то подобие обсуждения,
но вместо этого получали доклады о новом списке решенных задач.

Какое это вообще имеет значение - кому это нужно, и что лично вы по этому поводу думаете,
если еще не все задачи из текущего списка решены и выложены на гитхаб.

Это частный топик, человек говорит сам с собой.
Не надо ему мешать.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40136648
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby

Это частный топик, человек говорит сам с собой.

Вот вообще не согласен. Категорически не согласен.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40136684
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adminDontSleep
Valentin Kolesnikov
adminDontSleep,

Хочется решить все задачи, которые есть в leetcode и разместить их в одной библиотеке.

а вы не рассматриваете тот факт ,что задачи могут обновляться и пересматриваиться, а так же прибавляться кратно

В чем сакральный смысл вашей библиотеки?
Этот ресурс нужен для проверки своих знаний алгоритмов и структур данных

Это общедоступная библиотека в которой собраны все решения.

Я бы вас понял если бы на пальцах обьясняли почему вот так и так,какое время поиска получаеся и почему и тд
но у вас голое решение - которое даже не конкурирует с Discuss

Это решения из Discuss.

фактически ваша либа перебивается любым парсером правильно натравленым на /discuss

Не знаю, сомневаюсь.

Валентин не занимайтесь вы ерундой - это никому не надо и не будет востребовано,если хотите качественный ресурс - вам нужно все решения откоментить и обосновать,привести примеры плохих решений ,все это как привести к общему знаменателю
+ добавить ссылки на конкретные страницы книг - где описываются данные решения

У каждой задачи есть номер. Можно по номеру найти ее в LeetCode.

вот тогда ваша идея заиграет новыми красками - сейчас же это просто никому не нужно в таком виде

Я считаю что польза есть от библиотеки.

пс тем более это никому не нужно на джва ибо тут уже реализованы и сортировки и прочие алгоритмические чудеса)


Есть похожая библиотека на kotlin.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40136685
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby
adminDontSleep
...
тем более это никому не нужно...

(и mayton тоже)
Вы оба путаете личную историю и общественную пользу.
Некто решил 500 задач с литкода, а кто-то целую тысячу.
Вот и все.

Топикстартера несколько раз провоцировали на какое-то подобие обсуждения,
но вместо этого получали доклады о новом списке решенных задач.

Какое это вообще имеет значение - кому это нужно, и что лично вы по этому поводу думаете,
если еще не все задачи из текущего списка решены и выложены на гитхаб.

Это частный топик, человек говорит сам с собой.
Не надо ему мешать.


Отчего же. Я прислушиваясь к комментариям.
...
Рейтинг: 0 / 0
LeetCode in Java
    #40136818
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вышла новая версия библиотеки 1.7.

- Added tasks 811-1108
- Improved generatemd tool

С уважением, Валентин
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
LeetCode in Java
    #40137698
Фотография Конвертатор
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доступна обновленная версия библиотеки 1.22

- Added tasks 2542-2545
- Improved generatemd tool
...
Рейтинг: 0 / 0
LeetCode in Java
    #40137940
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доступна обновленная версия библиотеки 1.23

- Added tasks 2546-2637
- Improved generatemd tool
...
Рейтинг: 0 / 0
LeetCode in Java
    #40138098
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доступна обновленная версия библиотеки 1.24

- Added tasks 2637-2808
- Improved generatemd tool
...
Рейтинг: 0 / 0
LeetCode in Java
    #40138469
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доступна обновленная версия библиотеки 1.28

- Added tasks 2951-3000
- Improved generatemd tool
...
Рейтинг: 0 / 0
LeetCode in Java
    #40138723
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доступна обновленная версия библиотеки 1.34

- Added tasks 3200-3229
- Improved generatemd tool
...
Рейтинг: 0 / 0
104 сообщений из 104, показаны все 5 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / LeetCode in Java
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]