首页 > 其他分享 >#yyds干货盘点# LeetCode面试题:插入区间

#yyds干货盘点# LeetCode面试题:插入区间

时间:2023-03-23 18:32:03浏览次数:30  
标签:yyds 面试题 right int interval newInterval intervals ansList LeetCode

1.简述:

给你一个 无重叠的 ,按照区间起始端点排序的区间列表。

在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。

 

示例 1:

输入:intervals = [[1,3],[6,9]], newInterval = [2,5]

输出:[[1,5],[6,9]]

示例 2:

输入:intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]

输出:[[1,2],[3,10],[12,16]]

解释:这是因为新的区间 [4,8] 与 [3,5],[6,7],[8,10] 重叠。

示例 3:

输入:intervals = [], newInterval = [5,7]

输出:[[5,7]]

示例 4:

输入:intervals = [[1,5]], newInterval = [2,3]

输出:[[1,5]]

示例 5:

输入:intervals = [[1,5]], newInterval = [2,7]

输出:[[1,7]]

2.代码实现:

class Solution {
    public int[][] insert(int[][] intervals, int[] newInterval) {
        int left = newInterval[0];
        int right = newInterval[1];
        boolean placed = false;
        List<int[]> ansList = new ArrayList<int[]>();
        for (int[] interval : intervals) {
            if (interval[0] > right) {
                // 在插入区间的右侧且无交集
                if (!placed) {
                    ansList.add(new int[]{left, right});
                    placed = true;                    
                }
                ansList.add(interval);
            } else if (interval[1] < left) {
                // 在插入区间的左侧且无交集
                ansList.add(interval);
            } else {
                // 与插入区间有交集,计算它们的并集
                left = Math.min(left, interval[0]);
                right = Math.max(right, interval[1]);
            }
        }
        if (!placed) {
            ansList.add(new int[]{left, right});
        }
        int[][] ans = new int[ansList.size()][2];
        for (int i = 0; i < ansList.size(); ++i) {
            ans[i] = ansList.get(i);
        }
        return ans;
    }
}

标签:yyds,面试题,right,int,interval,newInterval,intervals,ansList,LeetCode
From: https://blog.51cto.com/u_15488507/6145824

相关文章

  • 肖sir ___面试题____吉利
    面试题:1、一个字典中有无数个数字典作为值,取出所有键?解答:(1)用到递归方法defget_keys(d):keys=[]fork,vind.items():keys.append(k)......
  • 代码随想录Day7-Leetcode454. 四数相加 II,383. 赎金信 ,15. 三数之和 ,18. 四数之和
    454.四数相加II这个第一时间没想出来怎么做的;后面看了题解才发现可以两两分组;绝了/***@param{number[]}nums1*@param{number[]}nums2*@param{number[......
  • redis面试题
    redis面试题1.什么是Redis?Redis(RemoteDictionaryServer)是一个使用C语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。2.Redis有哪些优缺点优......
  • [LeetCode] Power of Two
    判断2的次方数这道题让我们判断一个数是否为2的次方数,而且要求时间和空间复杂度都为常数我们来观察下2的次方数的二进制写法的特点:1    2      4   ......
  • 【leetcode-数组】有序矩阵中第K小的元素
    题目:给定一个 nxn 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。 示例:matrix=[......
  • 【leetcode-数组】对角线遍历
    题目:给定一个含有MxN个元素的矩阵(M行,N列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。 示例:输入:[[1,2,3],[4,5,6],[7,8......
  • 【leetcode-字符串】翻转字符串里的单词
    题目:给定一个字符串,逐个翻转字符串中的每个单词。 示例1:输入:"theskyisblue"输出: "blueisskythe"示例2:输入:" helloworld! "输出: "world!hello"......
  • 【leetcode-数组】长度最小的子数组
    题目:给定一个含有 n 个正整数的数组和一个正整数 s,找出该数组中满足其和 ≥s 的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回0。示例: 输入:s=7......
  • 【leetcode-数组】最大连续1的个数
    题目:给定一个二进制数组,计算其中最大连续1的个数。示例1:输入:[1,1,0,1,1,1]输出:3解释:开头的两位和最后的三位都是连续1,所以最大连续1的个数是3.注意:输入的数组......
  • leetcode-设置交集大小至少为2
    题目:一个整数区间[a,b](a<b)代表着从a到b的所有连续整数,包括a和b。给你一组整数区间intervals,请找到一个最小的集合S,使得S里的元素与区间intervals中的每......