leetcode 1351.统计有序矩阵中的负数

这里作者就不用暴力的法解了,这里用二分查找的方法给大家解释一下。

思路:由于我们看到题目要求说是一个非递增的数组,所以我们想着在每一行里面用二分,时间复杂度也就可能是O(nlogn)。

在这里我们不能按照那种从小到大的惯性思维去解题,需要知道这一次的顺序是反着的,那么我们的二分查找也就可以反着用。

他们说是要找全部负数,也就是说我们只要每一行从左到右找到了第一个负数的位置,也就知道了负数的数目(因为在第一个负数再往左全都是负数了,题目是从大到小排序的)。

如果说我们是用模板的,那么我么也可以这样理解,假如我们找到了第一个非负数的位置,也就相对的知道了第一个负数的位置了,从而推算出数目来,这样我们就可以用模板来实现这种想法了。

class Solution {
public:
    int countNegatives(vector<vector<int>>& grid) {
        int i=0;
        int count=0;
        while(i<grid.size()){
            int left=0;
            int right=grid[0].size()-1;
            while(left<right){
                int mid=(left+right+1)/2;
                if(grid[i][mid]>=0)
                left=mid;
                else
                right=mid-1;
            }
            if(grid[i][left]>=0)
            count+=grid[0].size()-left-1;
            else
            count+=grid[0].size();
            i++;
        }
        return count;
    }
};

相关推荐

  1. leetcode 1351.统计有序矩阵负数

    2024-02-07 18:10:04       47 阅读
  2. leetcode 4405.统计矩阵

    2024-02-07 18:10:04       42 阅读
  3. 双指针 Leetcode 151 反转字符串单词

    2024-02-07 18:10:04       33 阅读
  4. LeetCode双指针:有序数组单一元素

    2024-02-07 18:10:04       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-07 18:10:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-07 18:10:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-07 18:10:04       82 阅读
  4. Python语言-面向对象

    2024-02-07 18:10:04       91 阅读

热门阅读

  1. npm安装命令

    2024-02-07 18:10:04       49 阅读
  2. 经典网络面试题(4)

    2024-02-07 18:10:04       48 阅读
  3. CSS transition(过渡效果)详解

    2024-02-07 18:10:04       44 阅读
  4. 笔记---贪心---区间问题

    2024-02-07 18:10:04       48 阅读
  5. Debezium发布历史113

    2024-02-07 18:10:04       38 阅读