问题说明:给你一个m*n矩阵,和一个由a,b两个正整数二维数组构成的操作矩阵。根据这个操作矩阵中的数字对原矩阵中,行小于a,列小于b的数字进行+1操作。当操作完后,原矩阵中最大的数字有几个?
思路:一开始的想法是遍历操作矩阵,根据操作矩阵的数字大小对原矩阵进行加操作。后来发现,不管数字大小如何,矩阵中总会有数字增加。那么这些一直增加的数字是什么?是操作矩阵中,行数最小与列数最小的乘积。
原答案:
public int maxCount(int m, int n, int[][] ops) {
if(ops==null||ops.length==0||ops[0].length==0)
return m*n;
int row=ops.length;
int minX=Integer.MAX_VALUE,minY=Integer.MAX_VALUE;
for(int i=0;i<row;i++){
minX=Math.min(minX,ops[i][0]);
minY=Math.min(minY,ops[i][1]);
}
return Math.min(minX,m)*Math.min(minY,n);
}
最佳答案:
public int maxCount(int m, int n, int[][] ops) {
for (int[] op: ops) {
m = Math.min(m, op[0]);
n = Math.min(n, op[1]);
}
return m * n;
}
直接采用原指针会简化很多