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;
    }
};
相关推荐
王璐WL4 分钟前
【数据结构】单链表及单链表的实现
数据结构
黑屋里的马33 分钟前
java的设计模式之桥接模式(Bridge)
java·算法·桥接模式
z1874610300336 分钟前
list(带头双向循环链表)
数据结构·c++·链表
sin_hielo38 分钟前
leetcode 1611
算法·leetcode
李小白杂货铺1 小时前
识别和破除信息茧房
算法·信息茧房·识别信息茧房·破除信息茧房·算法推荐型茧房·观点过滤型茧房·茧房
来荔枝一大筐2 小时前
C++ LeetCode 力扣刷题 541. 反转字符串 II
c++·算法·leetcode
T.Ree.2 小时前
cpp_list
开发语言·数据结构·c++·list
暴风鱼划水2 小时前
算法题(Python)数组篇 | 6.区间和
python·算法·数组·区间和
童话ing2 小时前
【Golang】常见数据结构原理剖析
数据结构·golang
zl_vslam2 小时前
SLAM中的非线性优-3D图优化之轴角在Opencv-PNP中的应用(一)
前端·人工智能·算法·计算机视觉·slam se2 非线性优化