1、二维数组中的查找
1、暴力法遍历
运行时间: 169 ms 占用内存:17432K
public class Solution { public boolean Find(int target, int [][] array) { int lenY=array.length; int lenX=array[0].length; boolean flag=false; for(int j=0;j<lenY;j++){ for(int i=0;i<lenX;i++){ if (target == array[j][i]) return true; } } return flag; } }
2、分治法
【思路】:类似于二分法,从右上角元素开始查找。大于target说明在下面,i++;小于target说明在左侧,j--
同理,也可以从左下角开始查找。大于target,说明在右侧,j++;小于target说明在上方,i--
运行时间:239ms, 占用内存:18144k
public class Solution { public boolean Find(int target, int [][] array) { int lenY=array.length; int lenX=array[0].length; boolean flag=false; // 以右上角开始查找 // 第一次晓得for循环内的三个语句都是可以省略的。。 for(int i=0,j=lenX-1;(i>=0&&i<lenY) && (j>=0&&j<lenX);){ if (target == array[i][j]) return true; else if(target < array[i][j]) j--; else if(target > array[i][j]) i++; } return flag; } }