紧张而刺激的力扣180周赛结束了。个人认为这次的比赛相较于上一次更难一些,对数据结构的要求更高了。
矩阵中的幸运数
题目
其实是求矩阵中的鞍点,题目中需要返回所有的鞍点,也像样的将返回设定为list。
但其实可以证明的是,在各个元素各不相同的矩阵中,若有鞍点则仅有一个。
利用反证法:
假设存在两个鞍点a[x1][y1],a[x2][y2],易得x1≠x2,y1≠y2。
则由规则可得
- a[x1][y1] > a[x2][y1] > a[x2][y2],即 a[x1][y1] > a[x2][y2]
- a[x1][y1] < a[x1][y2] < a[x2][y2],即 a[x1][y1] < a[x2][y2]
两点结论矛盾,故不存在多于一个的鞍点
至于程序,由数据范围可知O(n^3)的暴力是可以通过的。
代码:
class Solution {
int n,m;
private boolean check(int x,int y,int[][] a)
{
for(int i = 0;i < n;i++)
{
if(a[i][y] > a[x][y])
{
return false;
}
}
for(int j = 0;j < m;j++)
{
if(a[x][j] < a[x][y])
{
return false;
}
}
return true;
}
public List<Integer> luckyNumbers (int[][] matrix) {
ArrayList<Integer> list = new ArrayList();
n = matrix.length;
m = matrix