题目大意:
找出所有行中最小公共元素
给你一个矩阵 mat,其中每一行的元素都已经按 递增 顺序排好了。请你帮忙找出在所有这些行中 最小的公共元素。
如果矩阵中没有这样的公共元素,就请返回 -1。
示例1:
Input: mat = [[1,2,3,4,5],[2,4,5,8,10],[3,5,7,9,11],[1,3,5,7,9]] Output: 5
提示:
- 1 <= mat.length, mat[i].length <= 500
- 1 <= mat[i][j] <= 10^4
- mat[i] 已按递增顺序排列。
如果想查看本题目是哪家公司的面试题,请参考以下免费链接: https://leetcode.jp/problemdetail.php?id=1198
解题思路分析:
因为要求出所有行的最小公共元素,因此,该元素一定存在于每一行中,也就是说这个公共元素一定是在第一行的某个元素中产生(如果第一行都没有该元素,那肯定不是公共元素)。我们可以使用一个数组来记录第一行的每个元素出现过的次数,如果出现次数等于行数,那么他就是公共元素,在其中找到最小的一个即是本题的解。
实现代码:
public int smallestCommonElement(int[][] mat) {
// 如果只有一行,首元素即为最小值,直接返回
if(mat.length==1) return mat[0][0];
// 记录首行每个元素出现过的次数
int[] map=new int[10001];
// 初始化首行元素出现次数均为1
for(int num : mat[0]){
map[num]=1;
}
// 从第二行开始循环
for(int i=1;i<mat.length;i++){
// 循环当前行每个元素
for(int num : mat[i]){
// 如果该元素出现次数与行数相同
// 说明之前每行都出现过该元素
if(map[num]==i){
// 如果当前是最后一行
if(i==mat.length-1){
// 返回第一个公共元素(最小)
return num;
}
// 当前元素个数加一
map[num]++;
}
}
}
return -1;
}本题解法执行时间为2ms。
Runtime: 2 ms, faster than 74.65% of Java online submissions for Find Smallest Common Element in All Rows.
Memory Usage: 63.9 MB, less than 100.00% of Java online submissions for Find Smallest Common Element in All Rows.
本网站文章均为原创内容,并可随意转载,但请标明本文链接如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: http://leetcode.jp/leetcode-1198-find-smallest-common-element-in-all-rows-解题思路分析/