小明想发明一台打点计数器,这个计数器有这样的一个功能:
- 它可以接收一个递增的数据范围(形如[3, 9]),其中第一个数字代表起始,第二个数字代表结束
- 这个数据范围中包含几个数字,打点计数器就会打几个点
- 在传入的多组数据范围中,如果出现了范围的重复,机器则不会重复打点
你可以帮助小明算一算,在不同的情况下,计数器会打出几个点么?
输入格式
一个二维数组
输出格式
一个整数,表达在输入是这个数组的情况下,计数器打出的点数
输入样例(1)
[
[1,4],
[7, 10],
[3, 5]
]
输出样例(1)
7
输入样例(2)
[
[1,2],
[6, 10],
[11, 15]
]
输出样例(2)
9
数据范围
- 数字范围 [-10^9, 10^9],数组长度 < 2^16
Java代码是:import java.util.HashSet; import java.util.Set;
public class Main { public static int solution(int[][] inputArray) { // 使用Set来存储不重复的点 Set points = new HashSet<>();
// 遍历每个区间
for (int[] range : inputArray) {
int start = range[0];
int end = range[1];
// 将区间内的每个点添加到Set中
for (int i = start; i <= end; i++) {
points.add(i);
}
}
// 返回Set的大小,即打点的总数
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
}
}