题目来源:牛客网-剑指Offer专题
题目地址:二维数组中的查找

题目描述

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

题目解析

方法一:
暴力法,遍历二维数组,时间复杂度为 O(n2)O(n^2)O(n2)

public class Solution {public boolean Find(int target, int [][] array) {for (int i = 0; i < array.length; i++){for (int j = 0; j < array[i].length; j++) {if (array[i][j] == target)return true;}        }return false;}
}

方法二:
根据题目信息可以知道,每一行的数字都是有序的。于是,我们对每一行都进行二分查找,时间复杂度O(nlogn)O(nlogn)O(nlogn)

public class Solution {public boolean Find(int target, int [][] array) {for (int i = 0; i < array.length; i++){//注意搜索的边界int left = 0, right = array[i].length - 1;while (left <= right) {int mid = (left + right) / 2;if (array[i][mid] > target) {right = mid - 1;} else if (array[i][mid] < target) {left = mid + 1;} else {return true;}}}return false;}
}

方法三:
由于在数组在水平和垂直方向都是递增的,所以我们可以从左下角开始,若当前值 nownownow 比目标值 targettargettarget 大,则向上移动;若 now<targetnow <targetnow<target ,则向右移动。以这种方法去搜寻目标值,时间复杂度O(n)O(n)O(n)

public class Solution {public boolean Find(int target, int [][] array) {int row = array.length - 1, col = 0;while (row >= 0 && col < array[row].length) {if (array[row][col] > target) {row--;} else if (array[row][col] < target) {col++;} else {return true;}}return false;}
}

如果本文对你有所帮助,别忘了点赞哦~

剑指Offer #01 二维数组中的查找(Java描述)相关推荐

  1. 剑指offer——01二维数组中的查找.

    class Solution {public:bool Find(int target, vector<vector<int> > array) {int m =array.s ...

  2. 剑指offer:二维数组中的查找

    目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺 ...

  3. 利用指针数组计算2个3行4列矩阵的和_[剑指 Offer] 04. 二维数组中的查找

    难度:简单 题目链接:剑指 Offer 04. 二维数组中的查找 题目描述: 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数, ...

  4. 【LeetCode】剑指 Offer 04. 二维数组中的查找

    [LeetCode]剑指 Offer 04. 二维数组中的查找 文章目录 [LeetCode]剑指 Offer 04. 二维数组中的查找 package offer;public class Solu ...

  5. 剑指 Offer 04. 二维数组中的查找

    剑指 Offer 04. 二维数组中的查找 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个 ...

  6. [剑指Offer]5.二维数组中的查找

    题目 在一个二维数组中,每一行都依照从左到右递增的顺序排序,每一列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个二维数组和一个整数.推断数组中是否含有该整数. 思路 [算法系列之三十三]杨 ...

  7. 《剑指Offer》——二维数组中的查找(JZ1)C++

    文章目录 前言 题目:JZ1 二维数组中的查找 一.暴力解法 二.优化解法 总结 前言 题目:JZ1 二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序, ...

  8. 剑指offer:二维数组中的查找python实现

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

  9. 剑指offer一:二维数组中的查找

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

最新文章

  1. 一台电脑怎么接两个显示器_电脑数码类目显示器 篇二:11.11抄作业,个人消费级显示器怎么选--20款好价显示器推荐_显示器...
  2. LeetCode 1868. 两个行程编码数组的积(双指针)
  3. Mars 是什么、能做什么、如何做的——记 Mars 在 PyCon China 2018 上的分享
  4. 精英赛上线|冠军万元奖金
  5. python字体大小颜色_在matplotlib中使用单词作为标记的“干净”方式?使字体大小和颜色不同?...
  6. es大量数据导入效率优化
  7. 控制台输出Security Warning: The negotiated TLS 1.0 is an insecure protocol and is suported for backward c
  8. OD调试2----破解序列号验证程序
  9. 前端两种播放视频的方式
  10. 游戏软件提示dll丢失、缺少dll等解决方法及dll文件大合集
  11. Boost常用库介绍
  12. Date对象身上的绑定的属性与方法
  13. 第八章 - 轮廓 - 查找轮廓、表示轮廓、绘制轮廓
  14. Android的虚拟设备的缩写,Android虚拟设备的英语缩写是
  15. CAN总线和CANOpen协议栈总结
  16. 下列哪个不是python的第三方库_以下选项中,不是 Python 中用于开发用户界面的第三方库是()...
  17. laravel 请求出现 post The page has expired due to inactivity.
  18. ym——物联网入口之一Android蓝牙4.0
  19. debian linux iso下载工具,debian 8.7系统下载
  20. 云队友丨张小龙最新公开课:不被看好的事情,才有戏

热门文章

  1. ARMv8/ARMv9指令集概述
  2. 如何订阅MQTT服务器历史消息,mqtt集群订阅如何只消费一个(一次)消息?
  3. 隐藏模块(无模块注入)
  4. 配置SQL Server数据库连接
  5. 14、修改字符集步骤详解
  6. 力扣: 88. 合并两个有序数组
  7. ppt的一些基础操作
  8. MySQL读写分离中间件解决
  9. Synchronize锁粒度
  10. Select控件可选可输入