4. 二维数组中的查找

  题目中有些特殊的地方,一定是用来结题的地方。查找类的问题多往有序性上靠,在一个有序的集合内查找要和二分查找类比,大于往左,小于向右。这一题我开始只想到了从一开始往右或者往下,思维定式,看一个数组总是想着按顺序从左往右or从上向下。

  写的时候也出现了一点意外,我居然在每次循环的时候重置了循环终止的条件,这不就是死循环了吗……所以提交的时候提醒我检查是否循环出现了错误,看来出错的不只我一个。

ublic class Solution {
    public boolean Find(int target, int [][] array) {
         int len = array[0].length;
        int hi = array.length;
        int i = 0;
        int j = hi-1;
  

        while (i<=len-1 && j>=0){
       i = 0;
       j = h1-i;
if(target>array[i][j]){ //如果target比该位置上的数大,就往下走 i += 1; }else if (target<array[i][j]){ j -= 1; }else if(target == array[i][j]) { return true; } } return false; } }

  

  正确答案很是简介,大了往下走,小了往左走。很想电视里猜一个物品价格的方式。一开始我在数组的下标也犯错了,长度不是下标!!!!长度不是下标!!!!!

  不过这种模式也很常见,如果在一个循环里能够解决某个问题就返回true,如果在循环里没有解决,在循环外面返回的内容就是false。

ublic class Solution {
    public boolean Find(int target, int [][] array) {
         int len = array[0].length;
        int hi = array.length;
        int i = 0;
        int j = hi-1;
  

        while (i<=len-1 && j>=0){
            if(target>array[i][j]){
                //如果target比该位置上的数大,就往下走
                i += 1;
           
            }else if (target<array[i][j]){
                j -= 1;
               
            }else if(target == array[i][j])  {
                return true;
            }
        }

        return false;
    }
}
原文地址:https://www.cnblogs.com/AshOfTime/p/10394798.html