剑指offer1:二维数组中的查找

题目描述:

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路:
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 }

 

posted @ 2018-03-08 11:05  zlz099  阅读(153)  评论(0编辑  收藏  举报