leetcode1351

统计有序矩阵中的负数
Category Difficulty Likes Dislikes
algorithms Easy (75.38%) 121 -
Tags
Companies
Unknown

给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目。

示例 1:

输入:grid = [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]
输出:8
解释:矩阵中共有 8 个负数。
示例 2:

输入:grid = [[3,2],[1,0]]
输出:0

提示:

m == grid.length
n == grid[i].length
1 <= m, n <= 100
-100 <= grid[i][j] <= 100

进阶:你可以设计一个时间复杂度为 O(n + m) 的解决方案吗?

Discussion | Solution

class Solution {
public:
    // 次解法的事件复杂度为 nlogm,  分层二分求解
    int countNegatives(vector<vector<int>>& grid) {
        int n = grid.size();
        int m = grid[0].size();
        int ans = 0;
        for(int i=0; i<n; i++)
        {
            int l = 0, r = m;
            while(l < m)
            {
                int mid = l + ((r-l)>>1);
                if(grid[i][mid] >= 0)
                    l = mid + 1;
                else
                    r = mid;
            }
            ans += m-l;
        }
        return ans;
    }
};
posted @   雷leileilei  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示