统计有序矩阵中的负数

题目链接

统计有序矩阵中的负数

题目描述

注意点

  • 1 <= m, n <= 100
  • -100 <= grid[i][j] <= 100
  • 矩阵中的元素无论是按行还是按列,都以非严格递减顺序排列

解答思路

  • 第一种思路是遍历每一行,再对每行进行二分查找找到每一行第一个负数的位置,求得该行负数的数量,将每一行的结果相加即可
  • 因为矩阵中的元素无论是按行还是按列,都以非严格递减顺序排列。所以在找到某一行最后一个正数的位置preCol后(此时该行的负数数量为n - preCol - 1),且下一行preCol之后的元素肯定都是负数(按行递减),所以下一行只需要从preCol开始往前遍历,继续找到下一行最后一个整数的列即可,以此类推,找到每一行的负数数量相加即可

代码

java 复制代码
class Solution {
    public int countNegatives(int[][] grid) {
        int res = 0;
        int m = grid.length;
        int n = grid[0].length;
        // 上一行最后一个正数的列
        int preCol = n - 1;
        for (int i = 0; i < m; i++) {
            while (preCol >= 0 && grid[i][preCol] < 0) {
                preCol--;
            }
            res += n - preCol - 1;
        }
        return res;
    }
}

关键点

  • 二分查找的思想
  • 利用好矩阵中的元素无论是按行还是按列,都以非严格递减顺序排列的规律
相关推荐
弹简特2 分钟前
【Java web】HTTP 与 Web 基础教程
java·开发语言·前端
字节跳跃者10 分钟前
Java 中的 Stream 可以替代 for 循环吗?
java·后端
北执南念29 分钟前
如何在 Spring Boot 中设计和返回树形结构的组织和部门信息
java·spring boot·后端
遗憾皆是温柔32 分钟前
19. 重载的方法能否根据返回值类型进行区分
java·开发语言·面试·学习方法
ts码农33 分钟前
model层实现:
java·服务器·前端
幸幸子.1 小时前
LeetCode 组合总数
c++·算法·leetcode
泰勒疯狂展开1 小时前
Java研学-RabbitMQ(六)
java·rabbitmq·java-rabbitmq
☆璇1 小时前
【C++】哈希
c++·算法·哈希算法
Warren981 小时前
Java Record 类 — 简化不可变对象的写法
java·开发语言·jvm·分布式·算法·mybatis·dubbo
SimonKing1 小时前
流式数据服务端怎么传给前端,前端怎么接收?
java·后端·程序员