剑指offer(一):二维数组中的查找

题目:

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

         1   5   7   8   9 

   2   6   8   9  10

   3   7  10 11 13

   4   8  12 13 15

   5   9  13 14 16

        给定数字12,如上数组找出12是否存在该数组中

解决方法:

  可以利用左下角或者右上角的优势,比如左下角数字5上面的数字都比他小右边的数字都比他大,右上角数字9下面的数字都比他大左边的数字都比他小。

思路:

  如题要找的数字是12,此时我们使用右上角的优势,右上角数字9,小于12,所以这个时候就在他的下一行找,此时下一行是数字10,同理比12小,往下一行找,下一行数字是13,此时13>12,故此从13的左边找(13下面的肯定都比13大), 左边是11,此时11<12,故从11的下面找(11的左边肯定都比11小),下一行是数字13,此时13>12,故从13的左边找(下面的肯定比13大),13的左边是12,此时找到了12直接返回true即可。若是没有找到则返回false

 

代码:

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

 

 

 

posted @ 2018-09-13 10:51  没有名字~  阅读(200)  评论(0编辑  收藏  举报