Python实现二维有序数组查找的方法


Posted in Python onApril 27, 2016

本文实例讲述了Python实现二维有序数组查找的方法。分享给大家供大家参考,具体如下:

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

这题目属于比较简单但又很不容易想到的,问了两个同学,大家一时都没有想出来怎么解决比较快。第一反应都是二分查找。对于每一行进行二分查找,然后查找过程可以把某些列排除掉,这是大家都能想到的基本的思路。

比较好的另一种思路是,首先选取数组右上角的数字,如果该数字等于要查找的数字,则查找结束;如果该数字大于要查找的数字,剔除这个数字所在的列,如果该数字小于要查找的数字,剔除这个数字所在的行。这样每一步都可以剔除一行或一列,查找的速度比较快。

python实现的代码:

# -*- coding:utf-8 -*-
'''
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
'''
def search(array, num):
  # 参数合法性判断忽略
  i = 0
  j = len(array[0]) - 1
  max_i = len(array) - 1
  while i <= max_i and j >= 0:
    if array[i][j] == num:
      return True
    elif array[i][j] > num:
      j = j - 1
    else:
      i = i + 1
  return False
if __name__ == '__main__':
  a = [[1, 2, 8, 9],
     [2, 4, 9, 12],
     [4, 7, 10, 13],
     [6, 8, 11, 15],
     ]
  print search(a, 14)
  print search(a, 7)
  print search(a, 0)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python 中的列表解析和生成表达式
Mar 10 Python
使用IPython来操作Docker容器的入门指引
Apr 08 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
Python初学者需要注意的事项小结(python2与python3)
Sep 26 Python
Python 使用 attrs 和 cattrs 实现面向对象编程的实践
Jun 12 Python
pyenv虚拟环境管理python多版本和软件库的方法
Dec 26 Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 Python
Python下使用Trackbar实现绘图板
Oct 27 Python
Python3读写ini配置文件的示例
Nov 06 Python
python 用Matplotlib作图中有多个Y轴
Nov 28 Python
python使用smtplib模块发送邮件
Dec 17 Python
手残删除python之后的补救方法
Jun 26 Python
Python数组遍历的简单实现方法小结
Apr 27 #Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 #Python
Python单链表简单实现代码
Apr 27 #Python
python版本的读写锁操作方法
Apr 25 #Python
Python简单实现enum功能的方法
Apr 25 #Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 #Python
Linux下通过python访问MySQL、Oracle、SQL Server数据库的方法
Apr 23 #Python
You might like
PHP实现全角字符转为半角方法汇总
2015/07/09 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
html+css+js实现xp window界面及有关功能
2013/03/26 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
js微信分享API
2020/10/11 Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
2016/12/20 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
js实现倒计时关键代码
2017/05/05 Javascript
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
vue登录注册实例详解
2019/09/14 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
Vue的transition-group与Virtual Dom Diff算法的使用
2019/12/09 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
JS删除对象中某一属性案例详解
2020/09/08 Javascript
python实现数通设备tftp备份配置文件示例
2014/04/02 Python
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
使用python实现tcp自动重连
2017/07/02 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
python 字典的打印实现
2019/09/26 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
python工具——Mimesis的简单使用教程
2021/01/16 Python
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
2014幼儿园家长工作总结
2014/11/10 职场文书
小学工作总结2015
2015/05/04 职场文书