统计有序矩阵中的负数

题目链接

统计有序矩阵中的负数

题目描述

注意点

  • 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;
    }
}

关键点

  • 二分查找的思想
  • 利用好矩阵中的元素无论是按行还是按列,都以非严格递减顺序排列的规律
相关推荐
真的想不出名儿3 小时前
springboot - 邮箱验证码登录
java·springboot·邮箱验证
杨小码不BUG4 小时前
CSP-J/S初赛知识点精讲-图论
c++·算法·图论··编码·csp-j/s初赛
the beard4 小时前
JVM垃圾回收器深度解析:从Serial到G1,探索垃圾回收的艺术
java·jvm
大虾别跑4 小时前
vc无法启动
java·开发语言
郭老二4 小时前
【JAVA】从入门到放弃-01-HelloWorld
java·开发语言
卷Java4 小时前
CSS模板语法修复总结
java·前端·css·数据库·微信小程序·uni-app·springboot
龙茶清欢4 小时前
7、revision 是 Maven 3.5+ 引入的现代版本管理机制
java·elasticsearch·maven
柯南二号4 小时前
【Java后端】《Spring Boot Starter 原理详解》博客
java·开发语言·spring boot
歪歪1005 小时前
如何在SQLite中实现事务处理?
java·开发语言·jvm·数据库·sql·sqlite
LeaderSheepH5 小时前
常见的排序算法
数据结构·算法·排序算法