统计负数

本文介绍了一种高效算法,用于计算一个横纵均排序的矩阵中负数的数量。通过从矩阵的右上角开始搜索,判断当前元素是否为负数来决定搜索方向,从而避免了遍历整个矩阵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给一个横向排序的且纵向也排序的的 n * m的矩阵, 问里面有几个负数

 注意事项
输入的矩阵大小为 n x m ,n <= 500,m <= 500。
为了约束程序的时间复杂度,你的程序将会运行 10^5 次

样例
Given mat =

[
    [-5,-3,-1,0,1],
    [-2,-1,0,0,1],
    [0,11,12,12,14]
],

return 5.

Explanation:
There are only 5 negative number.

Given mat =

[
    [-50,-30,-10,-5],
    [-30,-20,-5,-1],
    [-10,-5,-1,0]
]

return 11。

Explanation:
There are only 11 negative number.

思路
判断数组右上角数是否为负数,若不是负数,则本列没有负数,去前一列寻找,若是负数,在本行次数之前的数都是负数,之后去下一行寻找。

#ifndef C832_H
#define C832_H
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:
    /**
    * @param nums: the sorted matrix
    * @return: the number of Negative Number
    */
    int countNumber(vector<vector<int>> &nums) {
        // Write your code here
        if (nums.empty() || nums[0].empty())
            return 0;
        int row = nums.size(), col = nums[0].size();
        int i = 0, j = col - 1;
        int cnt = 0;
        //判断数组右上角数是否为负数
        //若不是负数,则本列没有负数,去前一列寻找
        //若是负数,在本行次数之前的数都是负数,之后去下一行寻找
        while (i < row&&j >= 0)
        {
            if (nums[i][j] >= 0)
                j--;
            else
            {
                cnt += (j + 1);
                i++;
            }
        }
        return cnt;
    }
};
#endif 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值