剑指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 }