剑指offer-二维数组查找
题目描述:给定一个二维数组,它的每一行从左往右递增,每一列从上往下递增,在该数组中查找目标值,如果存在返回true,否则返回false。
题目解法:
1 class Solution{ 2 public boolean findTarget(int target,int[][] array){ 3 int rows = array.length; //数组的行数 4 int cols = array[0].length; //数组的列数 5 if(rows==0||cols==0) return false; 6 for(int col=0;col<cols;col++){ 7 if(target==array[0][col]||target==array[rows-1][col])return true; 8 else if(target>array[0][col]&&target<array[rows-1][col]){ 9 for(int row=1;row<rows-1;row++){ 10 if(target==array[row][col])return true; 11 } 12 } 13 } 14 return false; 15 } 16 }
解题思路:由于是有序数组,因此数组的第一行、最后一行,第一列、最后一列构成了边界,然后可以通过target与边界值的大小关系,确定target的区间,然后在该区间遍历寻找target。