统计有序矩阵中的负数

题目链接

统计有序矩阵中的负数

题目描述

注意点

  • 1 <= m, n <= 100
  • -100 <= gridij <= 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;
    }
}

关键点

  • 二分查找的思想
  • 利用好矩阵中的元素无论是按行还是按列,都以非严格递减顺序排列的规律
相关推荐
lili0012几秒前
Claude自动修Bug配置优化与避坑指南
java·人工智能·python·bug·ai编程
Lucky_ldy几秒前
数据结构从入门到精通:顺序表
数据结构·链表
逻极1 分钟前
Java 从入门到精通:核心原理、最佳实践与性能优化
java·jvm·并发编程·集合框架
金牌归来发现妻女流落街头2 分钟前
【LeetCode 第207题】
算法·leetcode·拓扑·领接表
熬夜敲代码的猫8 分钟前
AVL树(C++详解版)
数据结构·c++·算法
摇滚侠16 分钟前
SpringBoot 内嵌 TongWeb 东方通替换 Tomcat
java·spring boot·spring
HeLiang719 分钟前
proguard 混淆 使用JDK17 的 springboot4 + JPA
java·spring boot·proguard
武子康21 分钟前
Java-10 深入浅出 MyBatis 一对多与多对多查询配置详解
java·后端
一 乐21 分钟前
网上订餐系统|基于springboot的网上订餐系统设计与实现(源码+数据库+文档)
java·数据库·spring boot·后端·论文·毕设·网上订餐系统
摇滚侠22 分钟前
我把一个依赖安装到了本地仓库,但是IDEA 刷新 maven 提示远程私服仓库找不到,怎么解决
java·maven·intellij-idea