剑指 Offer04. 二维数组中的查找

题目:

在一个 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 <= 1000

0 <= m <= 1000

 

复制代码
 1 //利用Arrays类二分查找法,快速从每一行查找,共需查找n次
 2 class Solution {
 3     public boolean findNumberIn2DArray(int[][] matrix, int target) {
 4         if(matrix==null || matrix.length==0 || matrix[0].length==0 ){return false;}
 5         int[] arr;
 6         for(int i=0;i<matrix.length;++i){
 7             arr=matrix[i];
 8           if(Arrays.binarySearch(arr,target)>=0){
 9               return true;
10           }
11         }
12         return false;
13     }
14 }
复制代码

 

 

 

复制代码
 1 //从右上角看,数组为二叉排序树
 2 class Solution {
 3     public boolean findNumberIn2DArray(int[][] matrix, int target) {
 4      if(matrix==null || matrix.length==0 || matrix[0].length==0 ){return false;}
 5      int n=0;
 6      int m=matrix[0].length-1;
 7      while(n<matrix.length&&m>=0){
 8          if(matrix[n][m]==target){return true;}
 9          else if(matrix[n][m]>target){m--;}    //目标值比数组值小,左移一位(m--)
10          else{n++;}  //目标值比数组值大向下移(n++)
11      }
12 
13     return false;
14    }
15 }
复制代码

 

posted @   堤苏白  阅读(41)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示