【每日一题】LeetCode 2848.与车相交的点(数组、哈希表、前缀和)
【每日一题】LeetCode 2848.与车相交的点(数组、哈希表、前缀和)
题目描述
给定一个二维整数数组 nums
,其中 nums[i] = [starti, endi]
表示第 i
辆车的起点为 starti
,终点为 endi
。我们需要找出数轴上被车辆覆盖的整数点的总数。
思路分析
这个问题可以通过以下步骤解决:
- 初始化集合:创建一个
HashSet
来存储数轴上被覆盖的整数点。 - 遍历车辆:对于数组中的每一辆车,遍历其起点到终点的每一个整数点。
- 添加点:将遍历到的每一个整数点添加到集合中。
- 计算结果:由于集合中的元素是唯一的,集合的大小即为被覆盖的整数点的总数。
输入示例
-
输入:
[[3,6],[1,5],[4,7]]
-
输出:
7
-
解释:从 1 到 7 的所有点都至少与一辆车相交,因此答案为 7。
-
输入:
[[1,3],[5,8]]
-
输出:
7
-
解释:1、2、3、5、6、7、8 共计 7 个点满足至少与一辆车相交,因此答案为 7。
代码实现
class Solution {
public int numberOfPoints(List<List<Integer>> nums) {
// 初始化一个 HashSet 来存储被覆盖的整数点
Set<Integer> set = new HashSet<>();
// 获取车辆的数量
int n = nums.size();
// 遍历每一辆车
for (int i = 0; i < n; i++) {
// 获取当前车辆的起点和终点
int start = nums.get(i).get(0);
int end = nums.get(i).get(1);
// 遍历当前车辆覆盖的每一个整数点
for (int j = start; j <= end; j++) {
// 将整数点添加到集合中
set.add(j);
}
}
// 返回集合的大小,即被覆盖的整数点的总数
return set.size();
}
}