小明正在设计一台打点计数器,该计数器可以接受多个递增的数字范围,并对这些范围内的每个唯一数字打点。如果多个范围之间有重叠,计数器将合并这些范围并只对每个唯一数字打一次点。小明需要你帮助他计算,在给定的多组数字范围内,计数器会打多少个点。
例如,给定三个数字范围 [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
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.HashSet;
import java.util.Set;
public class Main {
public static int solution(int[][] inputArray) {
// 创建一个集合来存储所有不重复的点
Set points = new HashSet<>();
// 遍历每个区间
for (int[] range : inputArray) {
int start = range[0];
int end = range[1];
// 将区间内的所有点添加到集合中
for (int i = start; i <= end; i++) {
points.add(i);
}
}
// 返回集合的大小,即计数器打出的点数
return points.size();
}
public static void main(String[] args) {
int[][] testArray1 = {{1, 4}, {7, 10}, {3, 5}};
int[][] testArray2 = {{1, 2}, {6, 10}, {11, 15}};
MarsCode AI
MarsCode AI
好的,让我们来逐步解决这个问题。首先,我们需要理解题目要求:计算多个区间合并后的总点数,并且不重复计算重叠的部分。
解题思路
-
数据结构选择:
- 使用一个集合(如
HashSet)来存储所有不重复的点。
- 使用一个集合(如
-
算法步骤:
- 遍历每个区间。
- 对于每个区间,将区间内的所有点添加到集合中。
- 最后,集合的大小就是计数器打出的点数。
代码提示
以下是代码的框架,关键步骤用注释标出:
java
import java.util.HashSet;
import java.util.Set;
public class Main {
public static int
solution(int[][]
inputArray) {
// 创建一个集合来存储
所有不重复的点
Set
points = new
HashSet<>();
// 遍历每个区间
for (int[] range
: inputArray) {
int start =
range[0];
int end =
range[1];
// 将区间内的所
有点添加到集合中
for (int i =
start; i <=
end; i++) {
points.add
(i);
}
}
// 返回集合的大小,即
计数器打出的点数
return points.size
();
}
public static void
main(String[] args) {
int[][]
testArray1 = {{1,
4}, {7, 10}, {3,
5}};
int[][]
testArray2 = {{1,
2}, {6, 10}, {11,
15}};
System.out.println
(solution
(testArray1) ==
7); // 应该输出
true
System.out.println
(solution
(testArray2) ==
9); // 应该输出
true
}
}
关键步骤解释
- 创建集合:使用
HashSet来存储所有不重复的点。 - 遍历区间:对于每个区间
[start, end],将区间内的所有点start到end添加到集合中。 - 返回集合大小:集合的大小就是计数器打出的点数。
你可以根据这个框架继续完善代码,确保所有细节都正确处理。如果有任何问题,欢迎继续提问!
如何处理输入数组中的重叠范围?
给我一些代码提示
帮我检查一下编辑区的代码