掘金打卡第二天

97 阅读1分钟

小明想发明一台打点计数器,这个计数器有这样的一个功能:

  • 它可以接收一个递增的数据范围(形如[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
}

}