前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[剑指]1二维数组的查找

[剑指]1二维数组的查找

作者头像
程序员的时光001
发布2020-07-13 11:09:47
5850
发布2020-07-13 11:09:47
举报
文章被收录于专栏:程序员的时光程序员的时光

1,题目描述

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

2,解题思路

代码语言:javascript
复制
题目中说是左到右递增,上到下也是递增,也就是说我们可以从右上角开始遍历查找;
定义二维数组arr[row][col],从第一行开始找定义行row=0,那么最右上角元素val列坐标为arr[0].length-1;
若目标元素tar比val大,那么第0行就全部比tar小,直接下移row++;
若目标元素tar比val小,那么此时应向左查找,直接左移col--;
while循环查找即可;

3,程序代码

代码语言:javascript
复制
//时间复杂度O(a+b)
    public boolean Find(int target,int [][] array){
        if(array.length==0) return false;
        //定义行列数,表示出右上角元素
        int row=0, clo=array[0].length-1;
        //row应小于二维数组行数,clo应大等于0
        while(row<=array.length-1&&clo>=0){
            if(target==array[row][clo]){
                return true;
            } else if(target>array[row][clo]){
                row++;
            } else{
                clo--;
            }
        }
        return false;
    }
    //时间复杂度O(a*b)
    public boolean Find1(int target,int [][] arr){
        if(arr.length==0) return false;
        for(int i=0;i<arr.length;i++){
            for(int j=0;j<arr[0].length;j++){
                if(target==arr[i][j]) return true;
            }
        }
        return false;
    }

这里用两种方法解决,第一种是前面说解题思路,第二种则是普遍的解题思路,两者的时间复杂度不同。

4,闲聊

源代码已经上传至码云: https://gitee.com/Huke-123/offer66_interview_questions/

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员的时光 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2,解题思路
  • 3,程序代码
  • 4,闲聊
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档