美文网首页
LintCode题解 | 亚马逊面试真题:搜索二维矩阵 II

LintCode题解 | 亚马逊面试真题:搜索二维矩阵 II

作者: SunnyZhao2019 | 来源:发表于2020-02-12 18:44 被阅读0次

    【题目描述】
    写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。

    这个矩阵具有以下特性:

    每行中的整数从左到右是排序的。
    每一列的整数从上到下是排序的。
    在每一行或每一列中没有重复的整数。

    【题目样例】

    样例1:

    输入:
    [[3,4]]
    target=3
    输出:1

    样例2:

    输入:
    [
    [1, 3, 5, 7],
    [2, 4, 7, 8],
    [3, 5, 9, 10]
    ]
    target = 3
    输出:2

    【评测与题解】

    →戳这里在线评测及查看题解

    /**
    * 本参考程序来自九章算法,由 @九章算法 提供。版权所有,转发请注明出处。
    * - 九章算法致力于帮助更多中国人找到好的工作,教师团队均来自硅谷和国内的一线大公司在职工程师。
    * - 现有的面试培训课程包括:九章算法班,系统设计班,算法强化班,Java入门与基础算法班,Android 项目实战班,
    * - Big Data 项目实战班,算法面试高频题班, 动态规划专题班
    * - 更多详情请见官方网站:http://www.jiuzhang.com/?source=code
    */ 
    
    public class Solution {
        /**
         * @param matrix: A list of lists of integers
         * @param: A number you want to search in the matrix
         * @return: An integer indicate the occurrence of target in the given matrix
         */
        public int searchMatrix(int[][] matrix, int target) {
            // check corner case
            if (matrix == null || matrix.length == 0) {
                return 0;
            }
            if (matrix[0] == null || matrix[0].length == 0) {
                return 0;
            }
            
            // from bottom left to top right
            int n = matrix.length;
            int m = matrix[0].length;
            int x = n - 1;
            int y = 0;
            int count = 0;
            
            while (x >= 0 && y < m) {
                if (matrix[x][y] < target) {
                    y++;
                } else if (matrix[x][y] > target) {
                    x--;
                } else {
                    count++;
                    x--;
                    y++;
                }
            }
            return count;
        }
    }
    
    
    // version: 高频题班
    public class Solution {
        /**
         * @param matrix: A list of lists of integers
         * @param: A number you want to search in the matrix
         * @return: An integer indicate the occurrence of target in the given matrix
         */
        public int searchMatrix(int[][] matrix, int target) {
            // write your code here
            int r = matrix.length - 1;
            int c = 0;
            int ans = 0;
            while (r >= 0 && c < matrix[0].length) {
                if (target == matrix[r][c]) {
                    ans++;
                    r--;
                    c++;
                    continue;
                }
                if (target < matrix[r][c]) {
                    r--;
                } else {
                    c++;
                }
            }
            return ans;
        }
    }
    

    相关文章

      网友评论

          本文标题:LintCode题解 | 亚马逊面试真题:搜索二维矩阵 II

          本文链接:https://www.haomeiwen.com/subject/nomcfhtx.html