题目描述:

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

题目分析:

对题目的分析:

我们选取二维数组右上角或者左下角的数字来不断的和目标整数做比较

详细思路:

以右上角来举例说明:

  • 首先我们选取数组右上角的数字。
  • 如果该数字等于要查找的数字,则查找过程结束。
  • 如果该数字大于查找的数字,则剔除这个数字所在的列。
  • 如果该数字小于要查找的数字,则剔除这个数字所在的行。

举例说明:

若目标number是7,先用7和9做比较,具体如下图所示:

代码实现:

class Solution:def find(self,array,number):if array == []:             # 排空return Falserows = len(array)           # 总行数columns = len(array[0])     # 总列数# 定义右上角坐标位置[i][j]i = 0   j = columns - 1while i < rows and j >= 0:if array[i][j] < number:     # 如果右上角值小于目标值,只可能在矩阵下方,则行数加1、下移i += 1elif array[i][j] > number:   # 如果右上角值大于目标值,只可能在矩阵左边,则列数减1、左移j -= 1else:return True    # 否则相等,返回Truereturn Falseif __name__ == '__main__':# 验证:# 二维数组中包含查找的数字test_1 = [[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]# 二维数组中不包含查找的数字test_2 = [[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]# 特殊输入测试(输入空数组)test_3 = []solution = Solution()print("test_1:", solution.find(test_1,7))print("test_2:", solution.find(test_2,3))print("test_3:", solution.find(test_3,5))

验证结果:

test_1: True
test_2: False
test_3: False

复杂度分析:

时间复杂度:

上述代码最长就是遍历完数组的所有数字,因此时间复杂度是 O(n)

空间复杂度:O(1)

剑指_4二维数组的查找(Python)相关推荐

  1. 剑指Offer——二维数组的查找(C语言)

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

  2. 隔一段时间查找一次 golang_剑指 offer-04 二维数组中的查找

    算法名称:二维数组中的查找 题目内容:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整 ...

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

    题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路法一: * 矩阵是 ...

  4. python 二维数组长度_剑指offer二维数组中的查找【Java+Python】

    点击上方"蓝字",关注了解更多 二维数组中的查找 1. 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序 ...

  5. 剑指offer - 二维数组中的查找

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

  6. 【二分法】剑指offer:二维数组中的查找

    对于二维数组中每一个一维数组,用二分查找,判断能否找到该数 leetcode专题笔记:二分法查找(1)(附leetcode题)_m0_52043808的博客-CSDN博客 代码: class Solu ...

  7. 剑指0ffer04.二维数组中的查找

    在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 示例: 现 ...

  8. 剑指Offer04. 二维数组中的查找

    在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 相当于二叉 ...

  9. 剑指offer之二维数组中查找

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

  10. 数据结构与算法--数组:二维数组中查找

    数组 数组最简单的是数据结构,占据一整块连续的内存并按照顺序存储数据,创建数组时候,我们需要首先指定数组的容量大小,然后根据大小分配内存.即使我们只在数组中存储一个元素,亚需要为所有数据预先分配内存, ...

最新文章

  1. Git安装配置(Linux)
  2. raster java_Raster
  3. 怎么查看和修改 MySQL 的最大连接数?
  4. 完善Library的管理方式
  5. mysql 数据记录导出_mysql如何导出600万条记录的数据表?
  6. ●洛谷P3687 [ZJOI2017]仙人掌
  7. Spring下Redis的响应式编程
  8. pytorch 与numpy 部分操作的对应关系
  9. 独家CleanMyMac使用教程
  10. java .jar怎么打开_java打开jar文件的方法
  11. 获取路由器后台账号密码
  12. 了解 SWFObject 2.0 应用
  13. context deadline exceeded
  14. 【python】python读取命令行选项参数
  15. 中国25张金融牌照大全
  16. 第十七届全国大学生智能汽车竞赛百度创意组来啦
  17. 关于win10微软商店重置后用不了的问题
  18. 如何解决租房烦恼?阿里工程师写了一套神奇的代码
  19. github这个项目,几行代码生成海报及二维码
  20. 2021-05-18 C#.NET面试题 Session有什么重大BUG,微软提出了什么方法加以解决?

热门文章

  1. (转)被AI改变的风投模式:数据驱动使效率提高10倍
  2. 跨5合并dnf无限连接服务器,不妨一试!跨5等跨区卡登陆卡黑屏解决办法分享
  3. 【优化算法】多目标水母搜索优化算法 (MOJS) 【含Matlab源码 248期】
  4. 【数字信号调制】基于matlab GUI数字信号调制系统【含Matlab源码 1030期】
  5. 【优化算法】Tent混沌映射的粒子群算法【含Matlab源码 940期】
  6. 【图像融合】基于matlab GUI SIFT+小波变换图像拼接融合系统【含Matlab源码 815期】
  7. 【背包问题】基于matlab多目标粒子群算法求解多背包问题【含Matlab源码 654期】
  8. idea新建一个java项目_创建第一个Java项目(Create First Java Project)
  9. 四菱天线怎么加强_白话天线(2)---什么是天线?
  10. 计算机表格斜杠怎么打,『excle表格怎么做斜杠线』excel怎么打斜杠