首页 > 其他分享 >LeetCode 354. (经典问题) 俄罗斯套娃信封问题 (俄罗斯套娃模型 + 最长下降子序列

LeetCode 354. (经典问题) 俄罗斯套娃信封问题 (俄罗斯套娃模型 + 最长下降子序列

时间:2023-11-26 14:44:34浏览次数:25  
标签:套娃 int 降序 len LeetCode envelopes 升序 俄罗斯

package leetcode;

import java.util.Arrays;

public class lec154 {
    /**
     *  首先是思路来源 : https://leetcode.cn/problems/russian-doll-envelopes/solutions/19681/zui-chang-di-zeng-zi-xu-lie-kuo-zhan-dao-er-wei-er/
     *  思路 :先按照宽度降序(升序) 接着宽度相同时再按照高度升序 (降序) (重点), 接着对高度求最长下降(上升) 子序列就可以
     *  正确性 : 宽度降序(升序) 以后我们的宽度前面一定大于(小于) 后面, 这样就保证了一个条件了, 然后就是宽度相同时, 我们按高度升序(降序) 排列, 这样我们保证求最长下降(上升) 子序列的时候同一宽度的信封就只选一个了 (太巧妙了, 我去)
     * */
    public int maxEnvelopes(int[][] envelopes) {
        Arrays.sort(envelopes, (a, b) -> {
            if (a[0] != b[0]) return b[0] - a[0];
            return a[1] - b[1];
        });

        int[] p = new int[envelopes.length + 10];
        p[0] = -0x3f3f3f3f;
        int len = 0;
        for (int i = 0; i < envelopes.length; i ++ ) {
            int l = 0, r = len;
            while (l < r) {
                int mid = l + r + 1 >> 1;
                if (p[mid] > envelopes[i][1]) l = mid;
                else r = mid - 1;
            }

            len = Math.max(len, r + 1);
            p[r + 1] = envelopes[i][1];
        }

        return len;
    }
}

标签:套娃,int,降序,len,LeetCode,envelopes,升序,俄罗斯
From: https://www.cnblogs.com/llihaotian666/p/17857191.html

相关文章

  • AcWing 蓝桥杯 3994. 阿坤老师的独特瓷器 (非常经典俄罗斯套娃问题
    package蓝桥杯;importjava.util.Arrays;importjava.util.Scanner;publicclasslanqiao3994{/***思路:*固定套路了感觉,先按直径从大到小排,然后直径相同的再按高度从小到大排*然后从前往后遍历的时候就可以在一定存在更大d的前......
  • 【11月LeetCode组队打卡】Task4--BinarySearchTree
    Review有数值有序树:lch<root<rch递归和迭代遍历不同于普通二叉树搜索BST700.二叉搜索树中的搜索有:返回以存储val节点为根的子树无:NULLAC1:递归参数和返回值:根节点&待寻值节点终止条件:根为空||匹配到val单层逻辑:有序树:从左到右搜索......
  • LeetCode二叉树小题目
    Q1将有序数组转换为二叉搜索树题目大致意思就是从一个数组建立平衡的二叉搜索树。由于数组以及进行了升序处理,我们只要考虑好怎么做到平衡的。平衡意味着左右子树的高度差不能大于1。由此我们可以想着是否能用类似二分+递归来解决。如果left>right,直接返回nullpter否则......
  • [LeetCode] 1630. Arithmetic Subarrays
    Asequenceofnumbersiscalledarithmeticifitconsistsofatleasttwoelements,andthedifferencebetweeneverytwoconsecutiveelementsisthesame.Moreformally,asequencesisarithmeticifandonlyifs[i+1]-s[i]==s[1]-s[0]forallvalid......
  • LeetCode之二叉树
    发现新天地,欢迎访问Cr不是铬的个人网站平衡二叉树做这一道题目我们要考虑到平衡二叉树的定义。也就是一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。关于一个结点的高度计算我们很容易用递归得出,那么我们用递归遍历加上这个判断条件即可.classSolution{pu......
  • 【11月LeetCode组队打卡】Task3--BinaryTree
    树基本术语:节点的度:叶子节点=0分支节点:含有的子树个数节点关系:父,子,兄节点层次:根节点:1floor路径:两节点间经过的节点序列路径长度:路径上的边数树的分类:节点子树是否可以互换位置:有序树:从左到右各子树依次有序(不能互换无序树二叉......
  • LeetCode-Java:88合并两个有序数组
    题目:给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1......
  • leetcode324场周赛
    一、使三个字符串相等给你三个字符串s1、s2和s3。你可以根据需要对这三个字符串执行以下操作任意次数。在每次操作中,你可以选择其中一个长度至少为2的字符串并删除其最右位置上的字符。如果存在某种方法能够使这三个字符串相等,请返回使它们相等所需的最小操作次数......
  • [LeetCode] 1361. Validate Binary Tree Nodes 验证二叉树
    Youhave n binarytreenodesnumberedfrom 0 to n-1 wherenode i hastwochildren leftChild[i] and rightChild[i],return true ifandonlyif all thegivennodesform exactlyone validbinarytree.Ifnode i hasnoleftchildthen leftCh......
  • 俄罗斯方块、pygame的学习与实践
    俄罗斯方块、pygame的学习与实践目录俄罗斯方块、pygame的学习与实践俄罗斯方块tkinterPygame介绍null俄罗斯方块相信绝大对数同学都玩过,现在学习用Python实现。tkinter发现参考资料使用tkinter,所以先学习tkinter(此处省略10086条tkintker学习)Pygame介绍Pygame是一个用......