598. 范围求和 II

博客围绕 LeetCode 上的“范围求和 II”问题展开,给出一个矩阵和操作数组,操作会使矩阵部分元素加 1,要求执行完所有操作后计算矩阵中最大整数的个数,还给出了示例及相关提示。

598. 范围求和 IIicon-default.png?t=M666https://leetcode.cn/problems/range-addition-ii/

难度简单170

给你一个 m x n 的矩阵 M ,初始化时所有的 0 和一个操作数组 op ,其中 ops[i] = [ai, bi] 意味着当所有的 0 <= x < ai 和 0 <= y < bi 时, M[x][y] 应该加 1。

在 执行完所有操作后 ,计算并返回 矩阵中最大整数的个数 。

示例 1:

输入: m = 3, n = 3,ops = [[2,2],[3,3]]
输出: 4
解释: M 中最大的整数是 2, 而且 M 中有4个值为2的元素。因此返回 4。

示例 2:

输入: m = 3, n = 3, ops = [[2,2],[3,3],[3,3],[3,3],[2,2],[3,3],[3,3],[3,3],[2,2],[3,3],[3,3],[3,3]]
输出: 4

示例 3:

输入: m = 3, n = 3, ops = []
输出: 9

提示:

  • 1 <= m, n <= 4 * 104
  • 0 <= ops.length <= 104
  • ops[i].length == 2
  • 1 <= ai <= m
  • 1 <= bi <= n

通过次数47,394提交次数82,485

class Solution {
    public int maxCount(int m, int n, int[][] ops) {
        if(ops.length==0) return m*n;
        int min_x = Integer.MAX_VALUE;
        int min_y = Integer.MAX_VALUE;
        for(int i=0;i<ops.length;i++)
        {
            min_x = Math.min(min_x,ops[i][0]);
            min_y = Math.min(min_y,ops[i][1]);
        }
        return min_x*min_y;
    }
}

 

 

Java 中,若需要使用 `List.stream()` 进行求和操作,则通常会结合 `mapToInt()`、`mapToLong()` 或 `mapToDouble()` 方法来完成。这些方法可以将集合中的对象映射为特定的数值类型流(如 `IntStream`、`LongStream`、`DoubleStream`),然后调用 `sum()` 方法进行求和。 ### 示例 1:对整数列表求和 如果有一个包含整数的 `List<Integer>`,可以直接使用 `mapToInt()` 并调用 `sum()`: ```java import java.util.Arrays; import java.util.List; public class StreamSumExample { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream() .mapToInt(Integer::intValue) .sum(); System.out.println("总和为: " + sum); // 输出 15 } } ``` ### 示例 2:对自定义对象的属性求和 假设有一个包含对象的列表,例如 `List<Person>`,其中每个 `Person` 对象都有一个 `age` 属性。可以通过 `mapToInt()` 提取 `age` 字段,并对其进行求和: ```java import java.util.Arrays; import java.util.List; class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public int getAge() { return age; } } public class StreamSumExample { public static void main(String[] args) { List<Person> people = Arrays.asList( new Person("Alice", 30), new Person("Bob", 25), new Person("Charlie", 35) ); int totalAge = people.stream() .mapToInt(Person::getAge) .sum(); System.out.println("总年龄为: " + totalAge); // 输出 90 } } ``` ### 示例 3:处理 `Double` 类型的求和 如果列表中存储的是浮点数值,可以使用 `mapToDouble()` 并调用 `sum()`: ```java import java.util.Arrays; import java.util.List; public class StreamSumExample { public static void main(String[] args) { List<Double> values = Arrays.asList(1.5, 2.5, 3.0); double sum = values.stream() .mapToDouble(Double::doubleValue) .sum(); System.out.println("总和为: " + sum); // 输出 7.0 } } ``` ### 示例 4:条件筛选后求和 可以在求和之前添加过滤条件,例如只计算满足特定条件的数据: ```java import java.util.Arrays; import java.util.List; public class StreamSumExample { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(10, 20, 30, 40, 50); int sum = numbers.stream() .filter(n -> n > 20) .mapToInt(Integer::intValue) .sum(); System.out.println("大于 20 的总和为: " + sum); // 输出 120 (30+40+50) } } ``` ### 注意事项 - `sum()` 方法只能用于 `IntStream`、`LongStream` 和 `DoubleStream`。 - 如果列表为空或没有匹配元素,`sum()` 将返回 0。 - 在处理自定义对象时,确保字段值不为 `null`,否则可能导致空指针异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值