g0301_0400.s0354_russian_doll_envelopes.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0301_0400.s0354_russian_doll_envelopes;
// #Hard #Array #Dynamic_Programming #Sorting #Binary_Search
// #2022_07_11_Time_46_ms_(99.83%)_Space_85.4_MB_(19.85%)
import java.util.Arrays;
/**
* 354 - Russian Doll Envelopes\.
*
* Hard
*
* 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 width and height of one envelope are greater than the other envelope's width and height.
*
* Return _the maximum number of envelopes you can Russian doll (i.e., put one inside the other)_.
*
* **Note:** You cannot rotate an envelope.
*
* **Example 1:**
*
* **Input:** envelopes = \[\[5,4],[6,4],[6,7],[2,3]]
*
* **Output:** 3
*
* **Explanation:** The maximum number of envelopes you can Russian doll is `3` ([2,3] => [5,4] => [6,7]).
*
* **Example 2:**
*
* **Input:** envelopes = \[\[1,1],[1,1],[1,1]]
*
* **Output:** 1
*
* **Constraints:**
*
* * `1 <= envelopes.length <= 5000`
* * `envelopes[i].length == 2`
* * 1 <= wi, hi <= 104
**/
public class Solution {
public int maxEnvelopes(int[][] envelopes) {
Arrays.sort(envelopes, (a, b) -> a[0] != b[0] ? a[0] - b[0] : b[1] - a[1]);
int[] tails = new int[envelopes.length];
int size = 0;
for (int[] enve : envelopes) {
int i = 0;
int j = size;
while (i != j) {
int mid = i + ((j - i) >> 1);
if (tails[mid] < enve[1]) {
i = mid + 1;
} else {
j = mid;
}
}
tails[i] = enve[1];
if (i == size) {
size++;
}
}
return size;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy