Java 算法-搜索二维矩阵II

  今天在lintCode上做了一道题,非常的简单,但是解题的思路太巧妙了,觉得有必要记录下来!

1.概览

(1).题意

  写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。
  这个矩阵具有以下特性:
   每行中的整数从左到右是排序的。
   每一列的整数从上到下是排序的。
   在每一行或每一列中没有重复的整数。

(2).样例

  考虑下列矩阵:

[
    [1, 3, 5, 7],
    [2, 4, 7, 8],
    [3, 5, 9, 10]
]

  给出target = 3,返回 2

(3).挑战

  要求O(m+n) 时间复杂度和O(1) 额外空间

2.解题思路

  这个题也是非常的简单!
  首先,我们从数组的左下角开始遍历。如果当前的数字大于target,我们向上移,因为上面的小于下面的;如果当前的数字小于target,我们向右移,因为右边的大于左边的;如果当前的数字等于target的话,sum++,并且向右上移,因为右上角的数字有可能还等于target。

3.代码

    public int searchMatrix(int[][] matrix, int target) {
        if(matrix.length == 0 || matrix[0][0] > target) {
            return 0;
        }
        int sum = 0;
        int x = 0;
        int y = matrix.length - 1;
        while(x < matrix[0].length && y >= 0) {
            if(matrix[y][x] == target) {
                sum++;
                x++;
                y--;
            }else if(matrix[y][x] > target) {
                y--;
            }else {
                x++;
            }
        }
        return sum;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,351评论 0 33
  • 本文出自 Eddy Wiki ,转载请注明出处:http://eddy.wiki/interview-code.h...
    eddy_wiki阅读 13,073评论 0 30
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 10,611评论 0 12
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,954评论 18 399
  • 概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的...
    Luc_阅读 6,771评论 0 35