二维数组中的查找
这是剑指Offer的第一道题目。 2星难度。
要利用好每行每列元素有序这个点。
思路很重要,暴力解法不可取。O(m*n)
而通过借鉴类似图片放大缩小的手法,可以将最大复杂度降到O(m+n)
我为这种方法起了一个名字: 【对角元素限制法】
见名之意,日后遇见类似二维数组中查找的题目,可借鉴对角元素限制法。
public class Solution {
public boolean Find(int target, int [][] array) {
//做好特殊情况的处理是所有题解的第一步。
int m=array.length;
if (m==0) return false;
int n=array[0].length;
if(n==0) return false;
//二维数组中,r是行,c是列。
int r=0,c=n-1;
while(r<m&&c>=0){
if(target==array[r][c]) return true;
//通过对二维图像角的拉缩来进行候选集的过滤。
if(target>array[r][c]) {
r++;
}else c--;
}
return false;
}
}
京公网安备 11010502036488号