leetcode1380#easy,模拟

题目要求:给出一个矩阵,列出这个矩阵里所有行内最小列内最大的数

最直接 的思路就是 直接比
先找到行内最小,然后遍历它所在的列,满足要求就加入结果集
这种情况下复杂度是O((m+n)*m),完全可以解决。
代码量和时间空间的复杂度上都应该是最优的解法
具体可以参考bloodborne给出的解法

但我当时没估复杂度就觉得会存在多次的比较。。。于是这样做了:
首先找到行内最小,然后标记:他所在的列是x
开一个map存起来:第x列的所在行最小的数字是y
然后遍历map:x列最大的是不是y
这种情况下,复杂度n+min(m,n)m),在最坏最坏的情况下,与上述的直接的思路相当。
省下来的是因为map的规模<=min(m,n) 每一列都只被比较了一次。
(btw,max和min在go里是给float64的,int没有)
(虽然go的语法真的和c很像很像,但go不允许?:;这种选择判断 需要老老实实if else)
正在习惯go的赋值:var

func luckyNumbers (matrix [][]int) []int {
    m:=len(matrix)
    res:=[]int{}
    addr:=make(map[int]int)
    for i:=0;ival{
                break
            }
        }
        if i==m{
            res=append(res,val)
        }
    }
    return res
}

你可能感兴趣的:(leetcode1380#easy,模拟)