您的位置:首页 > 娱乐 > 明星 > seo怎么优化关键词排名_巨腾外贸网站建设_免费网站推广网址_市场推广的方法和规划

seo怎么优化关键词排名_巨腾外贸网站建设_免费网站推广网址_市场推广的方法和规划

2025/1/3 1:43:55 来源:https://blog.csdn.net/sysu63/article/details/144815667  浏览:    关键词:seo怎么优化关键词排名_巨腾外贸网站建设_免费网站推广网址_市场推广的方法和规划
seo怎么优化关键词排名_巨腾外贸网站建设_免费网站推广网址_市场推广的方法和规划

插入区间

  • 题目
    • 题目描述
    • 示例 1:
    • 示例 2:
    • 提示:
  • 题解
    • 解题思路
    • python实现
    • 代码解释
    • 提交结果

题目

题目描述

给你一个 无重叠的 ,按照区间起始端点排序的区间列表 intervals,其中 intervals[i] = [starti, endi] 表示第 i 个区间的开始和结束,并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval = [start, end] 表示另一个区间的开始和结束。

在 intervals 中插入区间 newInterval,使得 intervals 依然按照 starti 升序排列,且区间之间不重叠(如果有必要的话,可以合并区间)。

返回插入之后的 intervals。

注意 你不需要原地修改 intervals。你可以创建一个新数组然后返回它。

示例 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] 重叠。

提示:

0 <= intervals.length <= 1 0 4 10^4 104
intervals[i].length == 2
0 <= starti <= endi <= 1 0 5 10^5 105
intervals 根据 starti 按 升序 排列
newInterval.length == 2
0 <= start <= end <= 1 0 5 10^5 105

题解

解题思路

为了在给定的无重叠且按起始端点排序的区间列表 intervals 中插入一个新的区间 newInterval,并保持区间列表的无重叠性和有序性,我们可以按照以下步骤来实现:

  1. 遍历现有区间:我们遍历现有的区间列表 intervals,同时维护两个列表:一个是用于存储最终结果的 result 列表,另一个是用于累积需要合并的区间的 merge 列表。
  2. 判断是否重叠:对于每个现有区间,我们需要检查它是否与 newInterval 重叠。如果它们之间有重叠,则将该区间加入到 merge 列表中,并更新 newInterval 的边界以包含所有这些重叠区间。
  3. 处理非重叠区间:如果当前区间不与 newInterval 重叠并且位于 newInterval 之前,则直接将其添加到 result 列表中;如果位于 newInterval 之后,则先将 newInterval 添加到 result,然后将当前区间以及后续的所有区间都添加到 result
  4. 插入新区间:一旦完成了对所有可能与 newInterval 重叠的区间的处理,确保将 newInterval 插入到 result 列表中(如果还没有的话)。

python实现

下面是 Python 实现代码:

def insert(intervals, newInterval):if not intervals:return [newInterval]result = []i = 0n = len(intervals)# Add all intervals that end before newInterval startswhile i < n and intervals[i][1] < newInterval[0]:result.append(intervals[i])i += 1# Merge all overlapping intervals to one considering newIntervalwhile i < n and intervals[i][0] <= newInterval[1]:newInterval[0] = min(newInterval[0], intervals[i][0])newInterval[1] = max(newInterval[1], intervals[i][1])i += 1# Add the merged intervalresult.append(newInterval)# Add all intervals that start after newInterval endswhile i < n:result.append(intervals[i])i += 1return result

代码解释

  • 第一段循环:遍历所有结束于 newInterval 开始之前的区间,直接添加到结果列表中。
  • 第二段循环:处理所有与 newInterval 重叠的区间,通过不断更新 newInterval 的边界来完成合并。
  • 第三段循环:将所有开始于 newInterval 结束之后的区间添加到结果列表中。
  • 插入 newInterval:确保在适当的位置插入合并后的 newInterval

这种方法的时间复杂度主要取决于遍历 intervals 的操作,即 O(n),其中 n 是 intervals 的长度。空间复杂度为 O(n),因为最坏情况下我们可能会创建一个新的区间列表来保存结果。

提交结果

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com