二维数组中的查找

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

  • resolution 1:

   resolution1 是一个比较容易想到的方法,依次从每行每列遍历整个数组直到找到和target相同的数为止

//运行时间:198ms

//占用内存:17364k
public class Solution {
    public boolean Find(int target, int [][] array) {
        int rowCount = array.length;
        int colCount = array[0].length;
        for(int i = 0;i < rowCount; i++){
            for(int j = 0; j < colCount; j++){
                if(target == array[i][j]){
                    System.out.println("exist");
                    return true;
                }
            }
        }
        System.out.println("not exist");
        return false;

    }
}
  • resolution2:

  resolution2 主要借助了该数组的特点,每次从每行的最后一个数开始比较,如果target大于最后一个数,就跳转到下一行,如果小于就继续比较。

  /**
         * 运行时间:211ms
         占用内存:17904k
         * @param target
         * @param array
         * @return
         */
        public boolean Find(int target, int [][] array) {
            int rowCount = array.length;
            int colCount = array[0].length;
            int j = colCount - 1;//局部变量
            int i = 0;

                while (j >= 0 && i < rowCount){//注意这里j能够取到0
                    if(target > array[i][j]){
                        i++;
                        j = colCount -1;//注意重新定义j的值
                        continue;
                    }else if(target < array[i][j]){
                        j--;
                    }else if(target == array[i][j]){
                        System.out.println("exist");
                        return true;
                    }
            }
            System.out.println("not exist");
            return false;
        }

 

posted @ 2019-01-11 10:58  crr121  阅读(118)  评论(0)    收藏  举报