华为OD机考 书籍叠放求大佬讲解思路

华为OD机考 书籍叠放
给定一组书的长宽,并且只有当一本书的长宽同时小于另一本书的长宽时,两书才能叠放在一起,求该组书中最多能有多少本书叠放在一起
输入:[[20,16],[15,11],[10,10],[9,10]]
输出:3,前三本可叠放在一起

import java.util.Arrays;
import java.util.Scanner;

public class dieShu {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine().replaceAll("\\[", "").replaceAll("\\]", "");
        String[] str = s.split(",");
        int[][] nums = new int[str.length / 2][2];
        for (int i = 0; i < nums.length; i++) {
            nums[i][0] = Integer.parseInt(str[i * 2]);
            nums[i][1] = Integer.parseInt(str[i * 2 + 1]);
        }
        Arrays.sort(nums, (a, b) -> (a[0] == b[0] ? b[1] - a[1] : a[0] - b[0]));
        int[] dp = new int[nums.length];
        Arrays.fill(dp, 1);
        int res = 0;
        for (int[] num : nums) {
            int left = 0, right = res;
            while (left < right) {
                int mid = (right - left ) / 2 + left;
                if (dp[mid] < num[1]) {
                    left = mid + 1;
                } else{
                    right = mid;
                }
            }
            dp[left] = num[1];
            if (left == res) {
                res++;
            }
        }
        System.out.println(res);
    }
}
有没有大佬给我解释下这玩意到底是啥意思,贪心加二分,dp【0】存放最长子序列长度为1的尾数,怎么比较得到最后答案len的长度的,看了半天没看懂
全部评论
就是最长递增子序列,力扣354一样题型
点赞 回复 分享
发布于 08-06 00:29 广东

相关推荐

求过求过
想玩飞盘的菠萝蜜在春...:流程这么快吗兄弟
点赞 评论 收藏
分享
09-16 14:33
已编辑
南京大学 Java
最近福耀科技大学好火啊,号称保底25w年薪就业,有不少高分学生都报了,兄弟们你有这个分,报传统92还是它?
ITTM:如果真的像宣传所说的能给到25w保底薪资,985也没啥吸引力了,这年头,读书不就是为了能多赚点钱嘛
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务