打点计数器的区间统计 | 豆包MarsCode AI 刷题

42 阅读4分钟

问题描述

小明正在设计一台打点计数器,该计数器可以接受多个递增的数字范围,并对这些范围内的每个唯一数字打点。如果多个范围之间有重叠,计数器将合并这些范围并只对每个唯一数字打一次点。小明需要你帮助他计算,在给定的多组数字范围内,计数器会打多少个点。

例如,给定三个数字范围 [1, 4], [7, 10], 和 [3, 5],计数器首先将这些范围合并,变成 [1, 5] 和 [7, 10],然后计算这两个范围内共有多少个唯一数字,即从 1 到 5 有 5 个数字,从 7 到 10 有 4 个数字,共打 9 个点。


测试样例

样例1:

输入:inputArray = [[1, 4], [7, 10], [3, 5]]
输出:9

样例2:

输入:inputArray = [[1, 2], [6, 10], [11, 15]]
输出:12

样例3:

输入:inputArray = [[1, 3], [2, 6], [8, 10]]
输出:9

问题理解

你需要计算多个递增数字范围的唯一数字总数。如果这些范围有重叠,你需要合并这些范围,然后计算合并后的每个范围中的唯一数字总数。

数据结构选择

  1. 排序:首先,你需要对输入的范围进行排序。排序的目的是为了更容易地合并重叠的范围。
  2. 合并区间:在排序之后,你可以遍历这些区间,合并有重叠的区间。
  3. 计算唯一数字总数:合并后的区间将不再有重叠,你可以直接计算每个区间中的数字总数。

算法步骤

  1. 排序:对输入的区间列表按照区间的起点进行排序,如果起点相同,则按终点排序。
  2. 合并区间:遍历排序后的区间列表,合并有重叠的区间。
  3. 计算总数:遍历合并后的区间列表,计算每个区间中的数字总数,并累加得到最终结果。

具体步骤

  1. 排序:使用Python的sort方法,按照区间的起点和终点进行排序。

  2. 合并区间

    • 初始化一个空列表merged_ranges用于存储合并后的区间。
    • 遍历排序后的区间列表,如果当前区间与merged_ranges中的最后一个区间没有重叠,则直接添加到merged_ranges
    • 如果有重叠,则更新merged_ranges中最后一个区间的终点。
  3. 计算总数:遍历merged_ranges,计算每个区间的数字总数并累加。

以下是实现代码

def solution(inputArray):



    # 排序范围,先根据起点排序,再根据终点排序
    inputArray.sort(key=lambda x: (x[0], x[1]))
    # 初始化合并后的区间列表
    merged_ranges = []

    # 合并区间
    for current_range in inputArray:
        # 检查是否需要合并
        if not merged_ranges or merged_ranges[-1][1] < current_range[0]:
            # 如果没有重叠,直接添加
            merged_ranges.append(current_range)
        else:
            # 有重叠,合并
            merged_ranges[-1][1] = max(merged_ranges[-1][1], current_range[1])

    # 计算总的唯一数字数目
    unique_count = 0
    for start, end in merged_ranges:
        unique_count += end - start + 1

    return unique_count

    if __name__ == "__main__":
    #  You can add more test cases here
    testArray1 = [[1,4], [7, 10], [3, 5]]
    testArray2 = [[1,2], [6, 10], [11, 15]]

    print(solution(testArray1) == 7 )
    print(solution(testArray2) == 9 )

我们就成功通过了本题🤩

本次我们通过《打点计数器的区间合并》这道题目的解决过程展示了豆包MarsCode AI刷题平台的几个显著亮点:

  1. 算法推荐与指导:当用户在解决问题时遇到瓶颈,例如不知道如何有效统计特定范围内的二进制数中1的个数之和时,AI能够提供具体的算法建议,并给出详细的算法流程、伪代码及实现代码,极大地降低了学习和解决问题的门槛。
  2. 多语言支持与代码转换:虽然豆包MarsCode AI刷题平台可能最初只提供了某些编程语言的支持,但它具备强大的跨语言代码转换功能,可以将用户的C++代码转换成Java或Python等其他语言的等效代码。这一特性对于那些需要在不同语言环境间切换的开发者来说非常有用,确保了用户能够在任何平台上顺利提交解决方案。
  3. 实践性与即时反馈:通过实际编写代码并测试示例输入输出,用户可以在提交之前验证自己的解答是否正确。这种即时的反馈机制有助于加深理解,及时调整错误,提高学习效率。

综上所述,豆包MarsCode AI刷题平台具有精准的算法指导、灵活的多语言支持以及即时的实践反馈,为用户提供了一个高效、便捷且富有成效的学习环境。

好了,那么我们这一次的解析就到这里,后面会给大家展示豆包MarsCode AI刷题的更多功能