Java算法Leetcode刷题是大多数Java程序员在提高自己的算法能力时所选择的途径之一。其中,《有序矩阵中的负数》是一道常见的算法题目。下面我将给出一份完整攻略,以便Java程序员能够更好地掌握这道题目。
题目描述
给定一个m*n的矩阵grid,其中每行和每列均已按非递增顺序排好序,请你统计并返回grid中 负数 的个数。
解题思路
因为矩阵已按照非递增顺序排好序,所以可以从右上角往左下角来遍历整个矩阵,如果当前的元素小于0,则说明其左侧的元素也都是负数,累加其个数,继续遍历下方的元素。
代码实现
class Solution {
public int countNegatives(int[][] grid) {
int count = 0;
int m = grid.length;
int n = grid[0].length;
int i = 0, j = n - 1;
while(i < m && j >= 0) {
if(grid[i][j] < 0) {
count += m - i;
j--;
} else {
i++;
}
}
return count;
}
}
其中,count表示负数的个数,m和n表示矩阵的行数和列数,i表示当前行数,j表示当前列数。从右上角开始遍历,如果当前元素grid[i][j]小于0,则说明该元素左侧的所有元素都是负数,累加其个数,j--继续往左遍历,否则,i++继续往下遍历。
示例说明
例如,给定下面的矩阵:
[
[ 4, 3, 2,-1],
[ 3, 2, 1,-1],
[ 1, 1,-1,-2],
[-1,-1,-2,-3]
]
则输出为3,因为矩阵中共有3个负数,分别是-1,-1,-2。
再例如,给定下面的矩阵:
[
[ 3, 2],
[ 1, 0]
]
则输出为0,因为矩阵中没有负数。
以上就是Java算法Leetcode刷题《有序矩阵中的负数》的完整攻略,希望能对读者的算法学习有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java算法Leecode刷题统计有序矩阵中的负数 - Python技术站