package LeetCode.OneThousandMore;
public class OneThousandThreeHundredAndFiftyOne {
public int countNegatives(int[][] grid) {
int count = 0;
int n = grid[0].length;
// 进行循环,找到特殊情况(即全为负或全为正)
for (int[] temp : grid){
// 全为正
if (temp[n - 1] > 0) continue;
// 全为负
if (temp[0] < 0){
count += n;
continue;
}
int left = 0, right = n - 1, num = -1;
// 进行二分搜索
while (left < right){
int mid = (left + right) / 2;
// 找到中间的那个数,如果该数小于0,说明左边还有可能是负数,右边必是负数
if (temp[mid] < 0){
num = mid;
right = mid - 1;
}else
left = mid + 1;
}
// 若num != -1 就说明这一行有负数,因为是递增的,只要用总数减去非负数的个数即可
if (num != -1) count += n - num;
}
return count;
}
}
1351. 统计有序矩阵中的负数(逐句解释代码)
最新推荐文章于 2022-05-03 17:43:51 发布