Leetcode解题报告——646. Maximum Length of Pair Chain

题目要求:
You are given n pairs of numbers. In every pair, the first number is always smaller than the second number.

Now, we define a pair (c, d) can follow another pair (a, b) if and only if b < c. Chain of pairs can be formed in this fashion.

Given a set of pairs, find the length longest chain which can be formed. You needn't use up all the given pairs. You can select pairs in any order.

Example 1:
Input: [[1,2], [2,3], [3,4]]
Output: 2
Explanation: The longest chain is [1,2] -> [3,4]

题目大意:
在给定数组集中,找出能形成链状的子集,求其长度,这道题中,链状子集指前一个数组的第二位元素小于下一个数组的第一位元素

解题思路:
我们可以利用类似贪心算法分析此问题,若想子链越长,则每个节点的第二位元素尽可能小,所以我们维护一个最小堆,将数组集按数组的第二位元素从小到大排序,然后遍历每个节点,若符合链状结构,则将长度加1

代码示例:

public static int findLongestChain(int[][] pairs) {

       Comparator<int[]> comparator = new Comparator<int[]>() {
           @Override
           public int compare(int[] o1, int[] o2) {
               return o1[1]-o2[1];
           }
       };

       PriorityQueue<int[]> queue =new PriorityQueue<int[]>(pairs.length,comparator);
        for (int[] pair : pairs) {
            queue.add(pair);
        }
        int result = 1,max = queue.poll()[1];
        int k = queue.size();
        for (int i = 0; i < k; i++) {
            int []var = queue.poll();
            if(max < var[0]){
                max = var[1];
                result++;
            }
        }
        return result;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Description: You are given n pairs of numbers. In every p...
    黑山老水阅读 2,405评论 0 0
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • 目录 上一篇 “无所不至?”从奶奶那里出来,江辰一直在回想着奶奶这意味深长的提示。“猫族会占卜,就是无所不知,这个...
    刘白月阅读 3,688评论 0 2
  • 两个人在一起,变得越来越差,是自己内心依然叛逆,对于他人的约束有些本能的反感和抵触。 很长一段时间的...
    唐三儿阅读 1,352评论 0 0
  • 监考路上的车里,男同事认真的开着车,我们几个女同事一起说说笑笑,不知怎么就谈到了孩子身上。 最先发表感想的是一直快...
    暖曦阅读 4,649评论 7 30