
- Главная
- Каталог
- Интернет технологии
- Java | LeetCode
Статистика канала
Input: sentence = ["hello","world"], rows = 2, cols = 8
Output: 1{}
👨💻 Алгоритм:
1⃣Преобразуйте предложение в единую строку с пробелами между словами и пробелом в конце.
2⃣Инициализируйте переменную для отслеживания текущей позиции в строке предложения. Для каждой строки экрана добавляйте количество символов, равное числу столбцов.
3⃣Если следующая позиция является пробелом, увеличивайте счетчик. Если нет, уменьшайте счетчик, пока не найдете пробел, чтобы избежать разрыва слова.
😎 Решение:
public class Solution {
public int wordsTyping(String[] sentence, int rows, int cols) {
String sentenceStr = String.join(" ", sentence) + " ";
int length = sentenceStr.length();
int count = 0;
for (int i = 0; i < rows; i++) {
count += cols;
if (sentenceStr.charAt(count % length) == ' ') {
count++;
} else {
while (count > 0 && sentenceStr.charAt((count - 1) % length) != ' ') {
count--;
}
}
}
return count / length;
}
}{}
Ставь 👍 и забирай 📚 Базу знаний
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⃣Найдем последний общий регион в путях двух заданных регионов.
😎 Решение:
import java.util.*;
public class Solution {
public String findSmallestRegion(List<List<String>> regions, String region1, String region2) {
Map<String, String> parent = new HashMap<>();
for (List<String> regionList : regions) {
for (int i = 1; i < regionList.size(); i++) {
parent.put(regionList.get(i), regionList.get(0));
}
}
Set<String> ancestors1 = new HashSet<>();
while (region1 != null) {
ancestors1.add(region1);
region1 = parent.get(region1);
}
while (!ancestors1.contains(region2)) {
region2 = parent.get(region2);
}
return region2;
}
}{}
Ставь 👍 и забирай 📚 Базу знаний
Input: arr = [3,3,3,3,5,5,5,2,2,7]
Output: 2
Explanation: Choosing {3,7} will make the new array [5,5,5,2,2] which has size 5 (i.e equal to half of the size of the old array).
Possible sets of size 2 are {3,5},{3,2},{5,2}.
Choosing set {2,7} is not possible as it will make the new array [3,3,3,3,5,5,5] which has a size greater than half of the size of the old array.{}
👨💻 Алгоритм:
1⃣Отсортировать массив и создать список подсчета количества вхождений каждого числа.
2⃣Отсортировать список подсчета в порядке убывания.
3⃣Удалять числа из массива, начиная с наибольшего количества вхождений, пока не будет удалено не менее половины чисел массива. Вернуть размер множества удаленных чисел.
😎 Решение:
class Solution {
public int minSetSize(int[] arr) {
Arrays.sort(arr);
List<Integer> counts = new ArrayList<>();
int currentRun = 1;
for (int i = 1; i < arr.length; i++) {
if (arr[i] == arr[i - 1]) {
currentRun += 1;
continue;
}
counts.add(currentRun);
currentRun = 1;
}
counts.add(currentRun);
Collections.sort(counts);
Collections.reverse(counts);
int numbersRemovedFromArr = 0;
int setSize = 0;
for (int count : counts) {
numbersRemovedFromArr += count;
setSize += 1;
if (numbersRemovedFromArr >= arr.length / 2) {
break;
}
}
return setSize;
}
}{}
Ставь 👍 и забирай 📚 Базу знаний
Input: words = ["cat","bt","hat","tree"], chars = "atach"
Output: 6
Explanation: The strings that can be formed are "cat" and "hat" so the answer is 3 + 3 = 6.{}
👨💻 Алгоритм:
1⃣Создайте хеш-таблицу counts, которая будет записывать частоту каждого символа в chars. Инициализируйте переменную ans = 0.
2⃣Итерируйте по каждому слову в words. Создайте хеш-таблицу wordCount, которая будет записывать частоту каждого символа в слове. Установите good = true. Итерируйте по каждому ключу c в wordCount. Пусть freq = wordCount[c]. Если counts[c] < freq, установите good = false и прервите цикл.
3⃣Если good = true, добавьте длину слова к ans. Верните ans.
😎 Решение:
class Solution {
public int countCharacters(String[] words, String chars) {
Map<Character, Integer> counts = new HashMap<>();
for (char c : chars.toCharArray()) {
counts.put(c, counts.getOrDefault(c, 0) + 1);
}
int ans = 0;
for (String word : words) {
Map<Character, Integer> wordCount = new HashMap<>();
for (char c : word.toCharArray()) {
wordCount.put(c, wordCount.getOrDefault(c, 0) + 1);
}
boolean good = true;
for (Map.Entry<Character, Integer> entry : wordCount.entrySet()) {
if (counts.getOrDefault(entry.getKey(), 0) < entry.getValue()) {
good = false;
break;
}
}
if (good) {
ans += word.length();
}
}
return ans;
}
}{}
Ставь 👍 и забирай 📚 Базу знанийОтзывы канала
- Добавлен: Сначала новые
- Добавлен: Сначала старые
- Оценка: По убыванию
- Оценка: По возрастанию
Каталог Телеграм-каналов для нативных размещений
Java | LeetCode — это Telegam канал в категории «Интернет технологии», который предлагает эффективные форматы для размещения рекламных постов в Телеграмме. Количество подписчиков канала в 6.9K и качественный контент помогают брендам привлекать внимание аудитории и увеличивать охват. Рейтинг канала составляет 5.6, количество отзывов – 1, со средней оценкой 5.0.
Вы можете запустить рекламную кампанию через сервис Telega.in, выбрав удобный формат размещения. Платформа обеспечивает прозрачные условия сотрудничества и предоставляет детальную аналитику. Стоимость размещения составляет 2377.62 ₽, а за 8 выполненных заявок канал зарекомендовал себя как надежный партнер для рекламы в TG. Размещайте интеграции уже сегодня и привлекайте новых клиентов вместе с Telega.in!
Вы снова сможете добавить каналы в корзину из каталога
Комментарий