Leetcode2848:与车相交的点

题目描述:

给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 inums[i] = [starti, endi] ,其中 starti 是第 i 辆车的起点,endi 是第 i 辆车的终点。

返回数轴上被车 任意部分 覆盖的整数点的数目。

代码思路:

  1. 排序
    • 首先,对输入的二维数组 nums 进行排序,排序的依据是每辆车的起点 starti。这样做的目的是为了能够按顺序处理车辆,使得我们可以有效地跟踪当前被覆盖的数轴区间。
  2. 初始化变量
    • m 初始化为第一辆车的终点 endi,表示当前被覆盖区间的上限。
    • n 初始化为第一辆车的起点 starti,表示当前被覆盖区间的下限。
    • ans 初始化为 0,用于存储最终被覆盖的整数点的数目。
  3. 遍历处理
    • 遍历排序后的车辆数组 sorted_array
    • 对于每一辆车,检查它的起点 sorted_array[i][0] 是否在当前被覆盖区间内(即是否小于等于 m)。
      • 如果是,说明这辆车与当前覆盖区间有重叠部分,因此更新 m 为当前覆盖区间和这辆车终点中较大的那个,以扩展覆盖区间。
      • 如果不是,说明这辆车与当前覆盖区间没有重叠,那么需要计算当前覆盖区间的长度并累加到 ans 中,然后更新 mn 为这辆车的终点和起点,以开始一个新的覆盖区间。
  4. 计算最后一个区间的长度
    • 遍历结束后,需要再加上最后一个覆盖区间的长度,因为在循环中最后一次更新 ans 是在找到一个不与当前区间重叠的新区间时,而最后一个区间之后没有新的区间来触发这个更新。
  5. 返回结果
    • 返回 ans,即数轴上被车辆任意部分覆盖的整数点的总数。

代码实现:

复制代码
class Solution:
    def numberOfPoints(self, nums: List[List[int]]) -> int:
        sorted_array = sorted(nums, key=lambda x: x[0])
        m=sorted_array[0][1] 
        n=sorted_array[0][0]
        ans=0
        # print(sorted_array)
        for i in range(len(sorted_array)):
            if sorted_array[i][0]<=m:
                #相交,保存最大的上限
                m=max(m,sorted_array[i][1])
            else:
                #计算长度
                ans+=(m-n+1)
                #保存新的上下限
                m=sorted_array[i][1]
                n=sorted_array[i][0] 
                       
        return ans+(m-n+1)
相关推荐
_Itachi__29 分钟前
LeetCode 热题 100 101. 对称二叉树
算法·leetcode·职场和发展
少了一只鹅40 分钟前
深入理解指针(5)
java·c语言·数据结构·算法
朱剑君1 小时前
第三天——贪心算法——区间问题
算法·贪心算法
阳洞洞1 小时前
leetcode 15. 三数之和
leetcode·双指针
Mi Manchi262 小时前
力扣热题100之合并两个有序链表
算法·leetcode·链表
阿沁QWQ2 小时前
C语言中的文本读写和二进制读写接口
开发语言·c++·算法
仙人掌_lz2 小时前
深入理解深度Q网络DQN:基于python从零实现
python·算法·强化学习·dqn·rl
小雅痞3 小时前
[Java][Leetcode middle] 80. 删除有序数组中的重复项 II
java·python·leetcode
TsingtaoAI3 小时前
企业内训|智能调控系统算法与优化——某汽车厂商
算法·汽车·ai企业内训·自动驾驶企业内训·智驾企业培训
安特尼3 小时前
招行数字金融挑战赛数据分析赛带赛题二
python·算法·机器学习·金融·数据分析