zoukankan      html  css  js  c++  java
  • 剑指offer —— 二维数组的查找

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

    2.思路:只看题目本身,可能不是这么直观(如果一眼就能得出规律的.....我觉得没有看下去的必要了....),

                 首先我们可以自己来一个符合题目条件的二维数组,用来寻找规律:

            

                 从图上可以很容易的看出来:在数组中,无论是哪一个数,它总是比右边的数小(或等于),总是比上面的数大。其实题目本身就是想告诉我们这个。

          除了上述之外,我们还需要知道: 对于 int[][] a = {{}},得出 a.length = 1 以及 a[0].length = 0 ;  对于 int[][] a = {},得出 a.length = 0 以及 a[0].lenght = 0。这是用来判断是否有必要查找。

    3.代码:

        public boolean find(int target, int [][] array) {
            
            //1.判断行和列的长度
            if(array.length == 0 || array[0].length == 0){
                return false;
            }
            
            //2.获取行和列的长度
            int rowLen = array.length;
            int colLen = array[0].length;    
            
            //3.开始遍历查找,从左下角开始查找,大于指定的整数:上移,小于指定的整数:下移
            for(int i = rowLen-1,j = 0; i >= 0 && j < colLen ; ){
                if(array[i][j] == target){
                    return true;
                }else if(array[i][j] > target){
                    i--;
                }else{
                    j++;
                }
            }
            
            //4.最后说明没有找到
            return false;
        }

          

    -- 整理于网络,加上自己的理解,大家一起学习,进步就好
  • 相关阅读:
    emacs 集成astyle
    git reflog
    rpm 打包的时候 不进行strip
    gmock
    如何对正在运行的进程,进行heap profile
    linux性能压测工具
    默认宏定义
    gdb fabs错误输出
    基于Clang的缓存型C++编译器Zapcc
    grep 多行 正则匹配
  • 原文地址:https://www.cnblogs.com/shulipeng/p/8989859.html
Copyright © 2011-2022 走看看