TGViewer
FAANG Master FAANG Master @faangmaster · 2.94K subscribers
Post #1090 2K
Задача с собеседования в Google: Russian Doll Envelopes

Задача. Дан двумерный массив envelopes, где envelopes[i] = [wᵢ, hᵢ] — ширина и высота i-го конверта.
Один конверт может быть вложен в другой, если его ширина и высота строго меньше ширины и высоты другого конверта.

Требуется найти максимальное число конвертов, которые можно вложить друг в друга.

Например,
envelopes = [[5,4],[6,4],[6,7],[2,3]]

Output: 3.
Можно вложить максимум 3 конверта друг в друга: [2,3] => [5,4] => [6,7]

Input: envelopes = [[1,1],[1,1],[1,1]]
Output: 1
По условию, конверты, одинаковые хотя бы по одному измерению, нельзя вкладывать друг в друга.

Ссылка на leetcode: https://leetcode.com/problems/russian-doll-envelopes/description/

Решение.
Решение разобрал тут: Задача с собеседования в Google: Russian Doll Envelopes

Код решения:

Вариант 1. Динамическое программирование.

public int maxEnvelopes(int[][] envelopes) {
Arrays.sort(envelopes, (a, b) -> {
if (a[0] == b[0]) {
return Integer.compare(a[1], b[1]);
}
return Integer.compare(a[0], b[0]);
});

int[] dp = new int[envelopes.length];
Arrays.fill(dp, 1);

int result = 1;

for (int i = 0; i < envelopes.length; i++) {
for (int j = 0; j < i; j++) {
if (envelopes[j][0] < envelopes[i][0] && envelopes[j][1] < envelopes[i][1]) {
dp[i] = Math.max(dp[i], dp[j] + 1);
}
}
result = Math.max(result, dp[i]);
}

return result;
}


Вариант 2. Бинарный поиск.
public int maxEnvelopes(int[][] envelopes) {
Arrays.sort(envelopes, (a, b) -> {
if (a[0] == b[0]) {
return Integer.compare(b[1], a[1]);
} else {
return Integer.compare(a[0], b[0]);
}
});

int[] tails = new int[envelopes.length];
int size = 0;

for (int i = 0; i < envelopes.length; i++) {
int h = envelopes[i][1];

int left = 0, right = size;
while (left < right) {
int mid = (left + right) >>> 1;
if (tails[mid] < h) {
left = mid + 1;
} else {
right = mid;
}
}

tails[left] = h;
if (left == size) {
size++;
}
}

return size;
}
LeetCode Russian Doll Envelopes - LeetCode Can you solve this real interview question? Russian Doll Envelopes - You are given a 2D array of integers envelopes where envelopes[i] = [wi, hi] represents the width and the height of an envelope. One envelope can fit into another if and only if both the…
  • 👍 15
  • ❤ 1
  • 🤪 1
More from @faangmaster
  1. Sep 13, 2026Навье-Стоксгейт 8 сентября OpenAI заявила, что её невыпущенная модель решила одну из семи…
  2. Sep 3, 2026Uber совместно с британским стартапом Wayve запускает роботакси в Лондоне Пришла нотификац…
  3. Aug 20, 2026Новый HTTP метод QUERY Этим летом в спецификацию HTTP добавили новый метод - QUERY. Добавл…
  4. Aug 15, 2026IOI 2026 В Ташкенте прошел межнар школьников по информатике. Результаты: https://stats.ioi…
  5. Jul 30, 2026В свое время я закончил МФТИ. Относительно непростой вуз для обучения. Закончил неплохо. З…
  6. Jul 18, 2026Документалка про Java В продолжение темы документалок, вышла документалка про Java. Трейле…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →