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

 

 

第一种方法:

设target是所要查找的数

 二维数组是有序的,我们可以现从右上方开始查找,若target>右上角的数,说明所要找的数在下面,所以使得row++;若target<右上角的数,说明在左边,使得column--;直到

找到数据跳出(true)或者遍历完所有的数据(false)。

 1 public class Solution {
 2     public boolean Find(int target, int [][] array) {
 3         boolean found=false;
 4         int lie=array[0].length;
 5         int hang=array.length;
 6         int row=0,column=lie-1;
 7         while(row<hang&&column>=0){
 8             if(target>array[row][column])row++;
 9             else if(target<array[row][column])column--;
10             else {found=true;break;}
11         }
12         return found;
13     }
14 }

 

第二种方法:

依次遍历每一行,在行内用二分查找法。

 

 1 public class Solution {
 2     public boolean Find(int target, int [][] array) {
 3         int i,mid;
 4         int low,high;
 5         for(i=0;i<array.length;i++){
 6             low=0;
 7             high=array[i].length-1;
 8             while(low<=high){
 9             mid=(low+high)/2;
10             if(target>array[i][mid])low=mid+1;
11             else if(target<array[i][mid])high=mid-1;
12             else return true;
13             }
14         }      
15         return false;
16     }
17 }

 

 

 

 

posted on 2017-11-02 13:33  TinyRick  阅读(147)  评论(0编辑  收藏  举报