一、前言

刷题平台:牛客网

二、题目

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

1、思路

首先选取数组中右上角的数字。如果该数字等于要查找的数字,查找过程结束;如果该数字大于要查找的数组,剔除这个数字所在的列;如果该数字小于要查找的数字,剔除这个数字所在的行。也就是说如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列,这样每一步都可以缩小查找的范围,直到找到要查找的数字,或者查找范围为空。

2、举例

如果在一个二维数组中找到数字7,则返回true,如果没有找到,则返回false。

查找过程如下:

3、编程实现

Python3:

# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
rows = len(array)
cols = len(array[0])
if rows > 0 and cols > 0:
row = 0
col = cols - 1
while row < rows and col >= 0:
if target == array[row][col]:
return True
elif target < array[row][col]:
col -= 1
else:
row += 1
return False

或者:

# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
rows = len(array)-1
cols = len(array[0])-1
i = rows
j = 0
while j<=cols and i>=0:
if target<array[i][j]:
i -= 1
elif target>array[i][j]:
j += 1
else:
return True return False

转载自:剑指Offer(一):二维数组中的查找 | Jack Cui

最新文章

  1. Java compiler level does not match解决方法
  2. mysql语句查询练习
  3. XE1:使用SSMS创建Extended Events
  4. karma与webpack结合
  5. AppleScript的字典怎么看怎么用
  6. mysql死锁问题解决步骤
  7. 游戏控制杆OUYA游戏开发快速入门教程
  8. mysql执行完select后,释放游标
  9. Thinking in java之正则表达式小例子
  10. Remoting,OData Snippet Compiler等
  11. copy con
  12. cocos2dx中的假动作,又称动作回调函数
  13. MSP430主系统时钟以及430的低功耗设置
  14. Android开发报错系列(一),java.lang.NullPointerException,at android.widget.ListView.setupChild
  15. 24种设计模式--代理模式【Proxy Pattern】
  16. 理解class.forName()(转)
  17. ASP.NET MVC用存储过程批量添加修改数据
  18. c++标准头文件
  19. C++各个存储区
  20. VMware 非简易安装centos6(静态ip配置)

热门文章

  1. HttpServletRespnse 对象 相关基本应用
  2. 双击Back退出应用 android中弹出吐司
  3. 填坑 | .NET core项目远程部署后连接数据库 mysql表大小写敏感问题
  4. 手写mybatis框架
  5. Java使用POI的SXSSFWorkbook与HSSFWorkbook导出复杂表头
  6. Python实践项目2
  7. php cookie及session
  8. Java程序取MySQL的datetime字段,如何消除时间尾后讨厌的&quot;.0&quot;
  9. postgres 无法删除表
  10. Idea没安装几款好用的插件,怎么风骚的写代码???