JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2022-09-30
目录

设置交集大小至少为2Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

一个整数区间 [a, b]  ( a < b ) 代表着从 a 到 b 的所有连续整数,包括 a 和 b。

给你一组整数区间intervals,请找到一个最小的集合 S,使得 S 里的元素与区间intervals中的每一个整数区间都至少有2个元素相交。

输出这个最小集合S的大小。

示例 1:

输入: intervals = [[1, 3], [1, 4], [2, 5], [3, 5]]
输出: 3
解释:
考虑集合 S = {2, 3, 4}. S与intervals中的四个区间都有至少2个相交的元素。
且这是S最小的情况,故我们输出3。

示例 2:

输入: intervals = [[1, 2], [2, 3], [2, 4], [4, 5]]
输出: 5
解释:
最小的集合S = {1, 2, 3, 4, 5}.

注意:

  • intervals 的长度范围为[1, 3000]。
  • intervals[i] 长度为 2,分别代表左、右边界。
  • intervals[i][j] 的值是 [0, 10^8]范围内的整数。

# 思路

    Arrays.sort(intervals,(a,b)->(a[1]==b[1]?a[0]-b[0]:a[1]-b[1]));
    TreeSet<Integer> items = new TreeSet<>();
    items.add(intervals[0][1]-1);

        Integer a = items.ceiling(item[0]);
        Integer b = items.floor(item[1]);

# 解法


class Solution {
    public int intersectionSizeTwo(int[][] intervals) {
        Arrays.sort(intervals,(a,b)->(a[1]==b[1]?a[0]-b[0]:a[1]-b[1]));
        TreeSet<Integer> items = new TreeSet<>();
        items.add(intervals[0][1]-1);
        items.add(intervals[0][1]);
        for(int i = 1; i < intervals.length; i++){
            int[] item = intervals[i];
            Integer a = items.ceiling(item[0]);
            Integer b = items.floor(item[1]);
            //两个重复的不加
            if(a!=null&&a!=b) continue;
            //懒得IF,直接倒着加到目标大小,不这么写的话,一个元素需要判重
            int size = items.size()+(a==null?2:1);
            int val = item[1];
            while(items.size()<size)items.add(val--);
        }
        return items.size();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
最近更新
01
1686. 石子游戏VI Java
08-18
02
1688. 比赛中的配对次数 Java
08-18
03
1687. 从仓库到码头运输箱子 Java
08-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式