当前位置: 首页 > news >正文

剑指offer(一) 二维数组的查找

题目描述

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
 
 第一种方法,在每一行进行二分查找,NlogN。
第二种方法,也可能是最好的,因为已经是有序的,我们选取左下角或者右上角,每次进行判断大小,选择上移或者右移,这样每次都有贪心选择,但是这样的时间复杂度怎么确定呢?
 
特别注意边界的判断!否则空指针异常。获得传进来的数组和获得下标之间尤其要判断。
 
class Solution {
    public boolean Find(int target, int [][] array) {
        if(array.length == 0 ) return false;
        //从左下角开始
        int r = array.length - 1;
        int l = 0;
        while(true) {
            if(r<0 || l>array[0].length-1) return false;

            if(array[r][l] > target) {
                r--;
            }else if(array[r][l] < target) {
                l++;
            }else {
                return true;
            }
        }
    }
}

public class Main {
    public static void main(String[] args) {
        int a = 16;
        int[][] array = {};
        Solution so = new Solution();
        System.out.println(so.Find(16,array));

    }
}
class Solution {
    public boolean Find(int target, int [][] array) {

        for(int i = 0; i < array.length; i++) {
            int l = 0;
            if(array.length<=0) return false;
            if(array[0].length<=0) return false;

            int r = array[0].length-1;
            while(l<=r) {
                int mid = (l+r)/2;
                if(target>array[i][mid]) {
                    l = mid+1;
                }
                else if(target<array[i][mid]) {
                    r = mid-1;
                }
                else
                    return true;
            }
        }
        return false;

    }
}

public class Main {
    public static void main(String[] args) {
        int a = 16;
        int[][] array = {{1,3,4},{3,16,1}};
        Solution so = new Solution();
        System.out.println(so.Find(16,array));

    }
}

 

转载于:https://www.cnblogs.com/zhangmingzhao/p/7788971.html

相关文章:

  • [vijos1554bzoj1411]硬币游戏快速幂
  • iPhone X Web 设计
  • 使用isolation forest进行dns网络流量异常检测
  • nginx 开机自动启动
  • Python监控服务器利器--psutil
  • 主线程退出,子线程会退出么?
  • apue读书笔记之apue.h的设置
  • rpm 安装中的问题
  • 编程学习初体验(3. 语言的选择)
  • oracle12C—RMAN表级恢复
  • 黑客的思想
  • RPC协议
  • 命令行工具软件
  • 腾讯云ubuntu安装tensorflow
  • Python垃圾回收机制:gc模块
  • .pyc 想到的一些问题
  • 《剑指offer》分解让复杂问题更简单
  • Android单元测试 - 几个重要问题
  • CentOS7简单部署NFS
  • Date型的使用
  • docker python 配置
  • java8 Stream Pipelines 浅析
  • JavaWeb(学习笔记二)
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Python十分钟制作属于你自己的个性logo
  • spring security oauth2 password授权模式
  • 漂亮刷新控件-iOS
  • 使用common-codec进行md5加密
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微信小程序设置上一页数据
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 应用生命周期终极 DevOps 工具包
  • 选择阿里云数据库HBase版十大理由
  • ​人工智能书单(数学基础篇)
  • ​用户画像从0到100的构建思路
  • # .NET Framework中使用命名管道进行进程间通信
  • # Panda3d 碰撞检测系统介绍
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • (003)SlickEdit Unity的补全
  • (C++20) consteval立即函数
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (一)u-boot-nand.bin的下载
  • (一)UDP基本编程步骤
  • .net 4.0发布后不能正常显示图片问题
  • .net 7 上传文件踩坑
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET Framework杂记
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .stream().map与.stream().flatMap的使用
  • @31省区市高考时间表来了,祝考试成功
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解
  • @取消转义
  • [1204 寻找子串位置] 解题报告