
- Главная
- Каталог
- Интернет технологии
- JavaScript | LeetCode
JavaScript | LeetCode
Разбираем задачи с LeetCode на языке программирования JavaScript
Статистика канала
Input: nums = [1,3,2,2,5,2,3,7]
Output: 5
Explanation: The longest harmonious subsequence is [3,2,2,2,3].{}
👨💻 Алгоритм:
1⃣Пройдитесь по массиву, создавая словарь для подсчета частоты каждого элемента.
2⃣На каждой итерации проверьте, существуют ли в словаре элементы, отличающиеся на 1 от текущего, и обновите максимальную длину гармоничной подпоследовательности.
3⃣Верните максимальную длину гармоничной подпоследовательности.
😎 Решение:
var findLHS = function(nums) {
const count = new Map();
let res = 0;
for (let num of nums) {
count.set(num, (count.get(num) || 0) + 1);
if (count.has(num + 1)) {
res = Math.max(res, count.get(num) + count.get(num + 1));
}
if (count.has(num - 1)) {
res = Math.max(res, count.get(num) + count.get(num - 1));
}
}
return res;
};{}
Ставь 👍 и забирай 📚 Базу знаний
Input: firstList = [[0,2],[5,10],[13,23],[24,25]], secondList = [[1,5],[8,12],[15,24],[25,26]]
Output: [[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]{}
👨💻 Алгоритм:
1⃣Инициализация указателей:
Завести два указателя i и j, указывающие на начало firstList и secondList соответственно.
2⃣Поиск пересечений:
Пока оба указателя находятся в пределах своих списков, выполнить следующие действия:
Найти максимальное начало и минимальный конец текущих интервалов.
Если начало меньше или равно концу, добавить пересечение в результат.
Сдвинуть указатель списка, у которого текущий интервал заканчивается раньше.
3⃣Возврат результата:
Вернуть список пересечений.
😎 Решение:
var intervalIntersection = function(firstList, secondList) {
let i = 0, j = 0;
const result = [];
while (i < firstList.length && j < secondList.length) {
const start = Math.max(firstList[i][0], secondList[j][0]);
const end = Math.min(firstList[i][1], secondList[j][1]);
if (start <= end) {
result.push([start, end]);
}
if (firstList[i][1] < secondList[j][1]) {
i++;
} else {
j++;
}
}
return result;
};{}
Ставь 👍 и забирай 📚 Базу знаний
Input:
regions = [["Earth","North America","South America"],
["North America","United States","Canada"],
["United States","New York","Boston"],
["Canada","Ontario","Quebec"],
["South America","Brazil"]],
region1 = "Quebec",
region2 = "New York"
Output: "North America"{}
👨💻 Алгоритм:
1⃣Построим дерево регионов, где каждый регион указывает на своего родителя.
2⃣Используя родительскую информацию, найдем путь от каждого региона до корня.
3⃣Найдем последний общий регион в путях двух заданных регионов.
😎 Решение:
var findSmallestRegion = function(regions, region1, region2) {
const parent = new Map();
regions.forEach(regionList => {
for (let i = 1; i < regionList.length; i++) {
parent.set(regionList[i], regionList[0]);
}
});
const ancestors1 = new Set();
while (region1) {
ancestors1.add(region1);
region1 = parent.get(region1);
}
while (!ancestors1.has(region2)) {
region2 = parent.get(region2);
}
return region2;
};{}
Ставь 👍 и забирай 📚 Базу знаний
Input: s = "abccccdd"
Output: 7{}
👨💻 Алгоритм:
1⃣Создайте словарь для подсчета количества каждого символа в строке.
2⃣Пройдитесь по словарю и добавьте четное количество каждого символа к длине палиндрома. Если встречается нечетное количество символа, добавьте (count - 1) к длине палиндрома.
3⃣Если есть хотя бы один символ с нечетным количеством, добавьте 1 к длине палиндрома для центрального символа.
😎 Решение:
function longestPalindrome(s) {
const charCount = {};
for (const char of s) {
charCount[char] = (charCount[char] || 0) + 1;
}
let length = 0;
let oddFound = false;
for (const count of Object.values(charCount)) {
if (count % 2 === 0) {
length += count;
} else {
length += count - 1;
oddFound = true;
}
}
return oddFound ? length + 1 : length;
}{}
Ставь 👍 и забирай 📚 Базу знаний
Input: words = ["cat","cats","catsdogcats","dog","dogcatsdog","hippopotamuses","rat","ratcatdogcat"]
Output: ["catsdogcats","dogcatsdog","ratcatdogcat"]
Explanation: "catsdogcats" can be concatenated by "cats", "dog" and "cats";
"dogcatsdog" can be concatenated by "dog", "cats" and "dog";
"ratcatdogcat" can be concatenated by "rat", "cat", "dog" and "cat".{}
👨💻 Алгоритм:
1⃣Для каждого слова в списке:
Построить неявный граф, в котором узлы представляют индексы символов в слове, а ребра представляют возможность перехода от одного индекса к другому, если подстрока между ними является словом из списка.
2⃣Использовать поиск в глубину (DFS) для проверки, можно ли достигнуть узел с индексом word.length от узла с индексом 0 в графе.
3⃣Если узел word.length достижим от узла 0, добавить слово в ответ.
😎 Решение:
class Solution {
dfs(word, length, visited, dictionary) {
if (length === word.length) {
return true;
}
if (visited[length]) {
return false;
}
visited[length] = true;
for (let i = word.length - (length === 0 ? 1 : 0); i > length; i--) {
if (dictionary.has(word.slice(length, i)) && this.dfs(word, i, visited, dictionary)) {
return true;
}
}
return false;
}
findAllConcatenatedWordsInADict(words) {
const dictionary = new Set(words);
const answer = [];
for (const word of words) {
const visited = Array(word.length).fill(false);
if (this.dfs(word, 0, visited, dictionary)) {
answer.push(word);
}
}
return answer;
}
}
// Example usage
const solution = new Solution();
const words = ["cat", "cats", "catsdogcats", "dog", "dogcatsdog", "hippopotamuses", "rat", "ratcatdogcat"];
console.log(solution.findAllConcatenatedWordsInADict(words));{}
Ставь 👍 и забирай 📚 Базу знанийОтзывы канала
Каталог Телеграм-каналов для нативных размещений
JavaScript | LeetCode — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 9.1K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 5.3, количество отзывов – 0, со средней оценкой 0.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 2237.76 ₽, а за 5 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий