题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
1、直接使用查找的方式,当数组中的数字刚好等于target则返回true,否则返回false。可以考虑使用二分查找降低复杂度
2、可以判断,选择左下角的数字或者右上角的数字进行比较可以使问题变简单。
1 //1、二分查找 2 public class Solution { 3 public boolean Find(int target, int [][] array) { 4 for(int i = 0; i < array.length;i++){ 5 int low = 0,high = array[i].length-1; 6 while(low<=high){ 7 int mid = (low+high)/2; 8 if(target>array[i][mid]){ 9 low = mid + 1; 10 } 11 else if(target<array[i][mid]){ 12 high = mid -1; 13 } 14 else 15 {return true;} 16 } 17 } 18 return false; 19 } 20 }
1 2、比较左下角或右上角的数 2 public class Erweishuzuchazhao { 3 public boolean Find(int target, int [][] array) { 4 int x = array.length-1; int y = 0; 5 while(x>=0&&y<array[0].length){ 6 if(target==array[x][y]) return true; 7 else if(target<array[x][y]){ 8 x--; 9 }else { 10 y++; 11 } 12 } 13 return false; 14 15 } 16 public static void main(String[] args) { 17 // TODO Auto-generated method stub 18 Erweishuzuchazhao erweishuzuchazhao = new Erweishuzuchazhao(); 19 int target = 7; 20 int[][] array = {{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}}; 21 if(erweishuzuchazhao.Find(target, array)==true) System.out.println(true); 22 } 23 24 }