剑指 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 }
· 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应用必不可少的技术