All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0301_0400.s0354_russian_doll_envelopes.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
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