题目地址(04. 二维数组中的查找)
https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/
题目描述
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定 target = 20,返回 false。限制:0 <= n <= 10000 <= m <= 1000注意:本题与主站 240 题相同:https://leetcode-cn.com/problems/search-a-2d-matrix-ii/
前置知识
公司
- 暂无
思路
暴力法可能面试不让过
把右上角的点看成二叉树的根节点左边小于这个数 下面大于这个数
关键点
代码
- 语言支持:Java
Java Code:
class Solution {public boolean findNumberIn2DArray(int[][] matrix, int target) {for (int i = 0; i < matrix.length; i++) {for (int j = 0; j < matrix[i].length; j++) {if (matrix[i][j] == target) {return true;}}}return false;}}
时间复杂度:
class Solution {public boolean findNumberIn2DArray(int[][] matrix, int target) {if(matrix == null || matrix.length == 0) {return false;}int column = matrix[0].length-1;int row = 0;while (column >= 0 && row < matrix.length) {if (matrix[row][column] > target) {column--;} else if (matrix[row][column] < target) {row++;} else {return true;}}return false;}}
时间复杂度:
复杂度分析
令 n 为数组长度。
- 时间复杂度:
#card=math&code=O%28n%29&id=RCnl2)
- 空间复杂度:
#card=math&code=O%28n%29&id=mJDtQ)
