LintCode领扣 题解 |Microsoft 面试题:Matrix Finding Number

题目描述

给出一个矩阵mat,找出所有行都出现的数字,如果有多个,就输出最小的那个数。如果没有,输出-1

思路点拨

用hashmap维护每个数最后出现的行数,最后在扫一遍hashmap取最小即可。

考点分析

本题对每行去暴力寻找有哪些数出现,显然不可取。我们可以换一个思维,对每个数x维护该数最后出现的行数,如果遍历到第i行,发现x的最后出现的行数不是i-1,那么我们就可以舍去这个数了,最后遍历一遍所有的数出现的行数是否为n即可。思维的转变尤其重要,本题也突出了MS的特色。

参考程序

http://www.jiuzhang.com/solution/matrix-finding-number/

/**
* 本参考程序来自九章算法,由 @斌助教 提供。版权所有,转发请注明出处。
* - 九章算法致力于帮助更多中国人找到好的工作,教师团队均来自硅谷和国内的一线大公司在职工程师。
* - 现有的面试培训课程包括:九章算法班,系统设计班,算法强化班,Java入门与基础算法班,Android 项目实战班,
* - Big Data 项目实战班,算法面试高频题班, 动态规划专题班
* - 更多详情请见官方网站:http://www.jiuzhang.com/?source=code
*/ 

public class Solution {
    /**
     * @param mat: The matrix
     * @return: The answer
     */
    Integer min(Integer a, Integer b) {
        if(a < b)
            return a;
        else 
            return b;
    }
    public int findingNumber(int[][] mat) {
        // Write your code here
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();  
        for(int i = 0; i < mat.length; i++) {
            for(int j = 0; j < mat[i].length; j++) {
                if(map.containsKey(mat[i][j])) {
                    if(map.get(mat[i][j]) == i - 1) {
                        map.put(mat[i][j], i);
                    }
                }
                else {
                    if(i == 0) {
                        map.put(mat[i][j], 0);
                    }
                }
            }
        }
        Integer ans = 10007;
        for (Map.Entry<Integer, Integer> it : map.entrySet()) {
            if(it.getValue() == mat.length - 1) {
                ans = min(ans, it.getKey());
            }
        }
        if(ans == 10007)
            ans = -1;
        return ans;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 关于诊断X线机准直器的作用,错误的是()。 (6.0 分) A. 显示照射野 B. 显示中心线 C. 屏蔽多...
    我们村我最帅阅读 13,739评论 0 5
  • 1. 下列叙述错误的是()。 (2.0 分) A. 质量管理包括QA和QC一切活动的全部过程 B. 影像质量是指对...
    我们村我最帅阅读 9,649评论 0 8
  • 动态规划 111. 爬楼梯思路类似斐波那契数列注意考虑第 0 阶的特殊情况 272. 爬楼梯 II思路类似上题,只...
    6默默Welsh阅读 7,150评论 0 1
  • 201. M-Q型显影液组合是()。 (2.0 分) A. 米吐尔与菲尼酮的组合 B. 对苯二酚和菲尼酮的组合 C...
    我们村我最帅阅读 9,185评论 0 4
  • 听了今天的课程,收获满满,给我印象最深的首先就是王老师一直面带微笑,真的是亲和力满满啊,能听她的课真的是一...
    最初滴梦想阅读 3,430评论 0 0

友情链接更多精彩内容