JavaScript | LeetCode

channel icon
Сайт: easyoffer.ru

Условия размещения

Цена за 48 часов в ленте 3000,00
Цена за 1 час закрепления N/A
Взаимопиар Нет
Дополнительные условия рекламы Отсутствуют
+1
8 627
подписчиков
+10
851
охват 1 публикации
0
~4
постов / день
+0,1%
9,9%
ERR % ?

Статистика

Последние публикации

JavaScript | LeetCode
21 декабря 2024 г. 19:07
#medium
Задача: 592. Fraction Addition and Subtraction

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

Окончательный результат должен быть несократимой дробью. Если ваш окончательный результат является целым числом, преобразуйте его в формат дроби с знаменателем 1. Таким образом, 2 должно быть преобразовано в 2/1.

Пример:
Input: expression = "-1/2+1/2+1/3"
Output: "1/3"


👨‍💻 Алгоритм:

1⃣Начните сканирование строки и разделите её на части, содержащие числители и знаменатели, с учетом знаков.

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

3⃣Верните результат в виде строки, представляющей несократимую дробь.

😎 Решение:
var fractionAddition = function(expression) {
let sign = [];
if (expression[0] !== '-') sign.push('+');
for (let char of expression) {
if (char === '+' || char === '-') sign.push(char);
}

let fractions = expression.replace(/-/g, '+-').split('+').filter(f => f.length > 0);
let prevNum = 0, prevDen = 1, i = 0;

for (let sub of fractions) {
let [num, den] = sub.split('/').map(Number);
let g = gcd(prevDen, den);
if (sign[i++] === '+') prevNum = prevNum * den / g + num * prevDen / g;
else prevNum = prevNum * den / g - num * prevDen / g;
prevDen = prevDen * den / g;
g = Math.abs(gcd(prevDen, prevNum));
prevNum /= g;
prevDen /= g;
}

return `${prevNum}/${prevDen}`;
};

function gcd(a, b) {
while (b !== 0) {
[a, b] = [b, a % b];
}
return a;
}


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
JavaScript | LeetCode
21 декабря 2024 г. 16:45
Откройте подписку на Кинопоиск и Музыку за 1₽Откройте подписку на Кинопоиск и Музыку за 1₽

Ответьте на 1 вопрос и получите в подарок доступ к Кинопоиску, Музыке и Книгам на 60 дней за 1 рубль.

✨ Сервисы будут доступны не только для Вас, но и для трёх ваших близких

ПопробоватьПопробовать

#реклама 18+
kinopoisk.ru

О рекламодателе
Реклама на Яндексе
JavaScript | LeetCode
21 декабря 2024 г. 12:07
#easy
Задача: 590. N-ary Tree Postorder Traversal

Дано корневое дерево с n-арной структурой, верните обход дерева в постфиксном порядке для значений его узлов.

Сериализация входных данных n-арного дерева представлена в обходе уровней. Каждая группа детей разделяется значением null (см. примеры).

Пример:
Input: root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
Output: [2,6,14,11,7,3,12,8,4,13,9,10,5,1]


👨‍💻 Алгоритм:

1⃣Инициализируйте стек для хранения узлов и список для хранения значений узлов в обратном порядке.

2⃣Начните с корневого узла и добавьте его в стек. Пока стек не пуст, извлекайте узлы из стека, добавляя их значения в начало списка, и добавляйте всех его детей в стек.

3⃣В конце верните список значений узлов.

😎 Решение:
function Node(val, children) {
this.val = val;
this.children = children ? children : [];
}

var postorder = function(root) {
if (!root) return [];

const stack = [root];
const output = [];

while (stack.length) {
const node = stack.pop();
output.unshift(node.val);
for (const child of node.children) {
stack.push(child);
}
}

return output;
};


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
JavaScript | LeetCode
20 декабря 2024 г. 19:07
#easy
Задача: 557. Reverse Words in a String III

Дана строка s. Необходимо изменить порядок символов в каждом слове в предложении, сохранив при этом пробелы и начальный порядок слов.

Пример:
Input: s = "Let's take LeetCode contest"
Output: "s'teL ekat edoCteeL tsetnoc"


👨‍💻 Алгоритм:

1⃣Создайте переменную lastSpaceIndex и установите её значение в -1. Пройдите по каждому символу строки s от 0-го до n-го индекса, используя указатель strIndex.

2⃣Когда strIndex указывает на пробел, определите начало (startIndex = lastSpaceIndex + 1) и конец (endIndex = strIndex - 1) текущего слова. Используя два указателя, измените порядок символов в текущем слове.

3⃣Обновите lastSpaceIndex значением strIndex. После окончания цикла измените порядок символов в последнем слове (от lastSpaceIndex + 1 до конца строки).

😎 Решение:
class Solution {
reverseWords(s) {
let chars = s.split('');
let lastSpaceIndex = -1;
let len = chars.length;

for (let strIndex = 0; strIndex <= len; strIndex++) {
if (strIndex == len || chars[strIndex] == ' ') {
let startIndex = lastSpaceIndex + 1;
let endIndex = strIndex - 1;
while (startIndex < endIndex) {
let temp = chars[startIndex];
chars[startIndex] = chars[endIndex];
chars[endIndex] = temp;
startIndex++;
endIndex--;
}
lastSpaceIndex = strIndex;
}
}

return chars.join('');
}
}


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
JavaScript | LeetCode
20 декабря 2024 г. 14:09
СберМобайл - мобильный оператор связи от СберСберМобайл - мобильный оператор связи от Сбер

Безлимитные мессенджеры. Оплата бонусами СберСпасибо до 99%. Широкое покрытие.

Дарим 30 Гб каждый месяц за перенос номера. Попробуйте со скидкой 40% по промокоду "NEW40SB".

Перейти на сайтПерейти на сайт

#реклама
sbermobile.ru

О рекламодателе
JavaScript | LeetCode
20 декабря 2024 г. 12:07
#medium
Задача: 556. Next Greater Element III

Мы можем перемешать строку s, чтобы получить строку t, используя следующий алгоритм:

Дано положительное целое число n. Найдите наименьшее целое число, которое имеет точно такие же цифры, как и число n, и больше самого числа n по значению. Если такого положительного целого числа не существует, верните -1.

Учтите, что возвращенное число должно помещаться в 32-битное целое число. Если существует допустимый ответ, но он не помещается в 32-битное целое число, верните -1.

Пример:
Input: n = 12
Output: 21


👨‍💻 Алгоритм:

1⃣Нахождение и перестановка цифр
Преобразуйте число n в массив цифр. Найдите первую цифру, которая нарушает убывающий порядок (с конца массива). Назовем её индексом i. Найдите первую цифру, которая больше digits[i-1] (с конца массива). Назовем её индексом j. Поменяйте местами цифры на позициях i-1 и j.

2⃣Обратный порядок оставшихся цифр
Обратный порядок части массива от индекса i до конца, чтобы получить наименьшую перестановку, которая больше исходной.

3⃣Проверка результата и преобразование обратно в число
Преобразуйте массив цифр обратно в число. Если число превышает 32-битный предел, верните -1. В противном случае верните полученное число.

😎 Решение:
class Solution {
swap(s, i0, i1) {
if (i0 === i1) return s;
let chars = s.split('');
[chars[i0], chars[i1]] = [chars[i1], chars[i0]];
return chars.join('');
}

constructor() {
this.list = [];
}

permute(a, l, r) {
if (l === r) {
this.list.push(a);
} else {
for (let i = l; i <= r; i++) {
a = this.swap(a, l, i);
this.permute(a, l + 1, r);
a = this.swap(a, l, i);
}
}
}

nextGreaterElement(n) {
let s = '' + n;
this.permute(s, 0, s.length - 1);
this.list.sort();
let index = this.list.indexOf(s);
if (index !== -1 && index < this.list.length - 1) {
let result = parseInt(this.list[index + 1]);
if (result <= 2147483647) {
return result;
}
}
return -1;
}
}


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
JavaScript | LeetCode
19 декабря 2024 г. 19:07
#medium
Задача: 554. Brick Wall

Перед вами находится прямоугольная кирпичная стена с n рядами кирпичей. В i-м ряду находится несколько кирпичей одинаковой высоты (то есть один юнит), но они могут быть разной ширины. Общая ширина каждого ряда одинакова.

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

Дан двумерный массив wall, содержащий информацию о стене, верните минимальное количество пересеченных кирпичей после проведения такой вертикальной линии.

Пример:
Input: wall = [[1,2,2,1],[3,1,2],[1,3,2],[2,4],[3,1,2],[1,3,1,1]]
Output: 2


👨‍💻 Алгоритм:

1⃣Определите общую ширину стены, сложив ширины кирпичей в первом ряду. Создайте массив pos, где pos[i] указывает на текущую позицию в i-ом ряду.

2⃣Пройдите по каждой возможной позиции для вертикальной линии (от 1 до общей ширины стены - 1). Для каждой позиции обновите массив pos, проверяя, пересекает ли линия границу кирпича. Если пересекает, увеличьте значение pos[i].

3⃣Подсчитайте количество кирпичей, которые пересечет вертикальная линия для каждой возможной позиции, обновляя счетчик. Выберите минимальное количество пересеченных кирпичей из всех возможных позиций для вертикальной линии.

😎 Решение:
var leastBricks = function(wall) {
let pos = new Array(wall.length).fill(0);
let sum = wall[0].reduce((a, b) => a + b, 0);
let res = Infinity;

while (sum !== 0) {
let count = 0;
for (let i = 0; i < wall.length; i++) {
if (wall[i][pos[i]] !== 0) {
count++;
} else {
pos[i]++;
}
wall[i][pos[i]]--;
}
sum--;
res = Math.min(res, count);
}

return res;
};


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
JavaScript | LeetCode
19 декабря 2024 г. 14:09
Запустите рекламу в телеграм-каналах с Яндекс ДиректомЗапустите рекламу в телеграм-каналах с Яндекс Директом

Перфоманс-реклама теперь в телеграм-каналах ⚡

Яндекс Директ знает, как привлечь целевую аудиторию 💰👌

ПопробоватьПопробовать

#реклама
yandex.ru

О рекламодателе
JavaScript | LeetCode
19 декабря 2024 г. 12:07
#hard
Задача: 420. Strong Password Checker

Пароль считается надежным, если выполняются следующие условия: в нем не менее 6 и не более 20 символов. он содержит не менее одной строчной буквы, не менее одной заглавной буквы и не менее одной цифры. он не содержит трех повторяющихся символов подряд (например, "Baaabb0" - слабый, а "Baaba0" - сильный). Учитывая строку пароля, верните минимальное количество шагов, необходимых для того, чтобы сделать пароль сильным. Если пароль уже сильный, верните 0. За один шаг можно: вставить один символ в пароль, удалить один символ из пароля или заменить один символ пароля другим символом.

Пример:
Input: password = "a"
Output: 5


👨‍💻 Алгоритм:

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

2⃣Вычислите количество необходимых замен для устранения трех повторяющихся символов подряд.

3⃣Определите минимальное количество шагов для приведения пароля к требуемым условиям, используя вычисленные значения недостающих символов, превышающих символов и замен.

😎 Решение:
function strongPasswordChecker(s) {
const n = s.length;
const hasLower = /[a-z]/.test(s);
const hasUpper = /[A-Z]/.test(s);
const hasDigit = /\d/.test(s);
let repeatCount = 0;

for (let i = 0; i < n;) {
const start = i;
while (i < n && s[i] === s[start]) {
i++;
}
repeatCount += Math.floor((i - start) / 3);
}

const missingTypes = 3 - [hasLower, hasUpper, hasDigit].filter(Boolean).length;

if (n < 6) {
return Math.max(missingTypes, 6 - n);
} else if (n <= 20) {
return Math.max(missingTypes, repeatCount);
} else {
let excessChars = n - 20;
let overLenReduction = 0;
for (let i = 2; i < n && excessChars > 0; i++) {
if (i % 3 === 2 && s[i] === s[i - 1] && s[i] === s[i - 2]) {
overLenReduction++;
excessChars--;
}
}
repeatCount -= overLenReduction;
return (n - 20) + Math.max(missingTypes, repeatCount);
}
}


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
JavaScript | LeetCode
18 декабря 2024 г. 19:07
#medium
Задача: 553. Optimal Division

Дано целочисленный массив nums. Соседние целые числа в nums будут выполнять деление с плавающей запятой.

Например, для nums = [2,3,4] мы будем вычислять выражение "2/3/4".
Однако, вы можете добавить любое количество скобок в любое место, чтобы изменить приоритет операций. Вы хотите добавить эти скобки так, чтобы значение выражения после вычисления было максимальным.

Верните соответствующее выражение, которое имеет максимальное значение в строковом формате.

Пример:
Input: nums = [1000,100,10,2]
Output: "1000/(100/10/2)"
Explanation: 1000/(100/10/2) = 1000/((100/10)/2) = 200
However, the bold parenthesis in "1000/((100/10)/2)" are redundant since they do not influence the operation priority.
So you should return "1000/(100/10/2)".
Other cases:
1000/(100/10)/2 = 50
1000/(100/(10/2)) = 50
1000/100/10/2 = 0.5
1000/100/(10/2) = 2


👨‍💻 Алгоритм:

1⃣Разверните оба числа. Инициализируйте массив ans с (N+M) нулями. Для каждой цифры во втором числе: держите переменную переноса, изначально равную 0. Инициализируйте массив (currentResult), начинающийся с некоторых нулей в зависимости от места цифры во втором числе.

2⃣Для каждой цифры первого числа: умножьте цифру второго числа на цифру первого числа и добавьте предыдущий перенос к результату умножения. Возьмите остаток от деления на 10, чтобы получить последнюю цифру. Добавьте последнюю цифру к массиву currentResult. Разделите результат умножения на 10, чтобы получить новое значение переноса.

3⃣После итерации по каждой цифре в первом числе, если перенос не равен нулю, добавьте перенос к массиву currentResult. Добавьте currentResult к массиву ans. Если последняя цифра в ans равна нулю, перед разворотом ans удалите этот ноль, чтобы избежать ведущего нуля в окончательном ответе. Разверните ans и верните его.

😎 Решение:
class Solution {
addStrings(num1, num2) {
let ans = [];
let carry = 0;
const n1 = num1.length;
const n2 = num2.length;

for (let i = 0; i < Math.max(n1, n2) || carry; i++) {
const digit1 = i < n1 ? num1[i] : 0;
const digit2 = i < n2 ? num2[i] : 0;
const sum = digit1 + digit2 + carry;
carry = Math.floor(sum / 10);
ans.push(sum % 10);
}
return ans;
}

multiplyOneDigit(firstNumber, secondNumberDigit, numZeros) {
const currentResult = new Array(numZeros).fill(0);
let carry = 0;

for (const digit of firstNumber) {
const multiplication = (secondNumberDigit * digit) + carry;
carry = Math.floor(multiplication / 10);
currentResult.push(multiplication % 10);
}
if (carry !== 0) {
currentResult.push(carry);
}
return currentResult;
}

multiply(firstNumber, secondNumber) {
if (firstNumber === "0" || secondNumber === "0") {
return "0";
}

firstNumber = firstNumber.split('').reverse().join('');
secondNumber = secondNumber.split('').reverse().join('');

let ans = new Array(firstNumber.length + secondNumber.length).fill(0);

for (let i = 0; i < secondNumber.length; i++) {
ans = this.addStrings(this.multiplyOneDigit(firstNumber, +secondNumber[i], i), ans);
}

while (ans[ans.length - 1] === 0) {
ans.pop();
}

return ans.reverse().join('');
}
}


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
JavaScript | LeetCode
18 декабря 2024 г. 15:48
Лицензионные решения Microsoft доступные в РоссииЛицензионные решения Microsoft доступные в России

Доступные решения к продаже на территории России со сроком подписки 12 месяцев:

- Microsoft Office 365 для бизнеса (Basic, Standard, Premium)
- Office E1, E3, E5, Microsoft F1, F3, F5
- Project Plan 5
- Microsoft Power BI
- Microsoft Dynamics 365

Заполните заявку, чтобы подключить продукт Microsoft

ПопробоватьПопробовать

#реклама 16+
cloud4y.ru

О рекламодателе
JavaScript | LeetCode
18 декабря 2024 г. 10:00
А вы знали что?...

🕵️В Windows есть папка, которая собирает на вас компромат!

Посмотрите видео выше — насколько легко узнать всю информацию о вас

Простых способов узнать о вас практически всё — сотни, и если вы хотите соблюдать хотя бы минимум сетевой гигиены — подпишитесь на IT ВЕДОМСТВО

Они рассказывает о признаках майнеров, как удалить трояны и порно-баннеры за 5 минут

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

💻 Подписываемся на IT ВЕДОМСТВОIT ВЕДОМСТВО — выигрываем призы и соблюдаем цифровую гигиену
JavaScript | LeetCode
17 декабря 2024 г. 19:07
#medium
Задача: 419. Battleships in a Board

Если задана матричная доска размером m x n, где каждая клетка - линкор 'X' или пустая '.', верните количество линкоров на доске. Линкоры могут располагаться на доске только горизонтально или вертикально. Другими словами, они могут быть выполнены только в форме 1 x k (1 строка, k столбцов) или k x 1 (k строк, 1 столбец), где k может быть любого размера. Между двумя линкорами есть хотя бы одна горизонтальная или вертикальная клетка (т. е. нет соседних линкоров).

Пример:
Input: board = [["X",".",".","X"],[".",".",".","X"],[".",".",".","X"]]
Output: 2


👨‍💻 Алгоритм:

1⃣Пройдите по каждой клетке матрицы.

2⃣Если текущая клетка содержит 'X' и она не является продолжением линкора (т.е. не имеет 'X' сверху или слева), увеличьте счетчик линкоров.

3⃣Верните итоговый счетчик.

😎 Решение:
function countBattleships(board) {
let m = board.length, n = board[0].length;
let count = 0;

for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (board[i][j] === 'X') {
if ((i === 0 || board[i - 1][j] === '.') && (j === 0 || board[i][j - 1] === '.')) {
count++;
}
}
}
}

return count;
}


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
JavaScript | LeetCode
17 декабря 2024 г. 15:40
Новогодний Мечталлион - Традиция, приносящая удачу!Новогодний Мечталлион - Традиция, приносящая удачу!

Каждый второй билет выигрывает!

1 января гарантированно разыграем миллиард ₽!

Успейте купить билет!

ИгратьИграть

#реклама
nloto.ru

О рекламодателе
JavaScript | LeetCode
17 декабря 2024 г. 12:07
#medium
Задача: 418. Sentence Screen Fitting

Если задан экран rows x cols и предложение, представленное в виде списка строк, верните количество раз, которое данное предложение может быть помещено на экран. Порядок слов в предложении должен оставаться неизменным, и слово не может быть разбито на две строки. Два последовательных слова в строке должны разделяться одним пробелом.

Пример:
Input: sentence = ["hello","world"], rows = 2, cols = 8
Output: 1


👨‍💻 Алгоритм:

1⃣Преобразуйте предложение в единую строку с пробелами между словами и пробелом в конце.

2⃣Инициализируйте переменную для отслеживания текущей позиции в строке предложения. Для каждой строки экрана добавляйте количество символов, равное числу столбцов.

3⃣Если следующая позиция является пробелом, увеличивайте счетчик. Если нет, уменьшайте счетчик, пока не найдете пробел, чтобы избежать разрыва слова.

😎 Решение:
function wordsTyping(sentence, rows, cols) {
const sentenceStr = sentence.join(" ") + " ";
const length = sentenceStr.length;
let count = 0;

for (let i = 0; i < rows; i++) {
count += cols;
if (sentenceStr[count % length] === " ") {
count++;
} else {
while (count > 0 && sentenceStr[(count - 1) % length] !== " ") {
count--;
}
}
}

return Math.floor(count / length);
}


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
JavaScript | LeetCode
16 декабря 2024 г. 19:07
#medium
Задача: 417. Pacific Atlantic Water Flow

Имеется прямоугольный остров размером m x n, который граничит с Тихим и Атлантическим океанами. Тихий океан касается левого и верхнего краев острова, а Атлантический океан - правого и нижнего краев. Остров разбит на сетку квадратных ячеек. Вам дана целочисленная матрица heights размером m x n, где heights[r][c] - высота над уровнем моря клетки с координатами (r, c). На острове выпадает много осадков, и дождевая вода может стекать в соседние клетки прямо на север, юг, восток и запад, если высота соседней клетки меньше или равна высоте текущей клетки. Вода может течь из любой клетки, прилегающей к океану, в океан. Верните двумерный список координат сетки result, где result[i] = [ri, ci] означает, что дождевая вода может течь из клетки (ri, ci) как в Тихий, так и в Атлантический океаны.

Пример:
Input: heights = [[1,2,2,3,5],[3,2,3,4,4],[2,4,5,3,1],[6,7,1,4,5],[5,1,1,2,4]]
Output: [[0,4],[1,3],[1,4],[2,2],[3,0],[3,1],[4,0]]


👨‍💻 Алгоритм:

1⃣Определите две матрицы для отслеживания клеток, из которых вода может течь в Тихий и Атлантический океаны, используя поиск в глубину (DFS) или поиск в ширину (BFS), начиная с границ, примыкающих к каждому океану.

2⃣Выполните поиск для каждого океана, обновляя матрицы достижимости.

3⃣Соберите координаты клеток, которые могут стекать в оба океана, проверяя пересечение двух матриц достижимости.

😎 Решение:
function pacificAtlantic(heights) {
const m = heights.length, n = heights[0].length;
const pacific = Array.from({ length: m }, () => Array(n).fill(false));
const atlantic = Array.from({ length: m }, () => Array(n).fill(false));
const directions = [[-1, 0], [1, 0], [0, -1], [0, 1]];

function dfs(r, c, ocean) {
ocean[r][c] = true;
for (const [dr, dc] of directions) {
const nr = r + dr, nc = c + dc;
if (nr >= 0 && nc >= 0 && nr < m && nc < n && !ocean[nr][nc] && heights[nr][nc] >= heights[r][c]) {
dfs(nr, nc, ocean);
}
}
}

for (let i = 0; i < m; i++) {
dfs(i, 0, pacific);
dfs(i, n - 1, atlantic);
}
for (let j = 0; j < n; j++) {
dfs(0, j, pacific);
dfs(m - 1, j, atlantic);
}

const result = [];
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (pacific[i][j] && atlantic[i][j]) {
result.push([i, j]);
}
}
}
return result;
}


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
JavaScript | LeetCode
16 декабря 2024 г. 12:07
#medium
Задача: 416. Partition Equal Subset Sum

Если задан целочисленный массив nums, верните третье максимальное число в этом массиве. Если третьего максимального числа не существует, верните максимальное число.

Пример:
Input: nums = [1,5,11,5]
Output: true


👨‍💻 Алгоритм:

1⃣Проверьте, является ли сумма всех элементов массива четной. Если нет, верните false.

2⃣Используйте динамическое программирование для определения, можно ли найти подмножество с суммой, равной половине от общей суммы элементов.

3⃣Инициализируйте массив для хранения возможных сумм и обновляйте его, проверяя каждое число в массиве.

😎 Решение:
function canPartition(nums) {
const sum = nums.reduce((a, b) => a + b, 0)
if (sum % 2 !== 0) return false
const target = sum / 2
const dp = Array(target + 1).fill(false)
dp[0] = true

for (const num of nums) {
for (let j = target; j >= num; j--) {
dp[j] = dp[j] || dp[j - num]
}
}

return dp[target]
}


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
JavaScript | LeetCode
16 декабря 2024 г. 10:00
Господи, да в чём проблема стать фронтендером?

Подписался на эти три канала:

👉 ФронтендФронтенд
👉
ВерсткаВерстка
👉
Node.JSNode.JS

Заходишь каждый день, тратишь 15 минут и изучаешь актуальную информацию. Можешь сразу применять на практике. ВСЁ!

Это настолько просто, что даже твой кот справится. Подпишись сейчас, потом спасибо скажешь.
JavaScript | LeetCode
15 декабря 2024 г. 19:07
#easy
Задача: 415. Add Strings

Если задан целочисленный массив nums, верните третье максимальное число в этом массиве. Если третьего максимального числа не существует, верните максимальное число.

Пример:
Input: num1 = "11", num2 = "123"
Output: "134"


👨‍💻 Алгоритм:

1⃣Инициализируйте три переменные для хранения первого, второго и третьего максимальных чисел.

2⃣Пройдите по массиву nums, обновляя переменные первого, второго и третьего максимальных чисел, избегая дубликатов.

3⃣Верните третье максимальное число, если оно существует, иначе верните первое максимальное число.

😎 Решение:
function thirdMax(nums) {
let first = null;
let second = null;
let third = null;

for (const num of nums) {
if (num === first || num === second || num === third) {
continue;
}
if (first === null || num > first) {
third = second;
second = first;
first = num;
} else if (second === null || num > second) {
third = second;
second = num;
} else if (third === null || num > third) {
third = num;
}
}

return third !== null ? third : first;
}


Ставь 👍👍 и забирай 📚📚 Базу знаний Базу знаний
JavaScript | LeetCode
15 декабря 2024 г. 15:34
Миграция в облако? Это легко!Миграция в облако? Это легко!

Собственная инфраструктура устарела или не справляется с нагрузками? Используйте облачные ресурсы! Эксперты Yandex Cloud помогут перейти в облако быстро, легко и безопасно.

✅ Мы полностью сопровождаем процесс.
✅ От вас — только инженер с доступом к инфраструктуре.
✅ Архитектура под ваши задачи, миграция и поддержка на каждом шагу — всё включено.

⚡Переходите в Yandex Cloud и забудьте о старом железе. А если успеете подать заявку до 31 декабря, мы покроем расходы на инженеров и тестовую инфраструктуру.

Подать заявкуПодать заявку

#реклама 16+
yandex.cloud

О рекламодателе
Реклама на Яндексе