powered by simpleCommunicator - 2.0.28     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / LeetCode in Java
25 сообщений из 104, страница 2 из 5
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
25 сообщений из 104, страница 2 из 5
Форумы / Java [игнор отключен] [закрыт для гостей] / LeetCode in Java
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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