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中用format函数格式化字符串的用法
Apr 08 Python
Python实例一个类背后发生了什么
Feb 09 Python
python中的格式化输出用法总结
Jul 28 Python
Python3 Random模块代码详解
Dec 04 Python
python3.x实现发送邮件功能
May 22 Python
Python异常处理操作实例详解
Aug 28 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
Python之Numpy的超实用基础详细教程
Oct 23 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
Feb 15 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
Feb 17 Python
python matplotlib 绘图 和 dpi对应关系详解
Mar 14 Python
使用Python将图片转正方形的两种方法实例代码详解
Apr 29 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
php4与php5的区别小结(配置异同)
2011/12/20 PHP
JavaScript 解析读取XML文档 实例代码
2009/07/07 Javascript
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
js数组操作学习总结
2013/11/04 Javascript
js css 实现遮罩层覆盖其他页面元素附图
2014/09/22 Javascript
node.js中的events.emitter.listeners方法使用说明
2014/12/10 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
javascript中Date format(js日期格式化)方法小结
2015/12/17 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
JS动态创建元素的两种方法
2016/04/20 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
vue.js项目nginx部署教程
2018/04/05 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
微信小程序API—获取定位的详解
2019/04/30 Javascript
IE11下处理Promise及Vue的单项数据流问题
2019/07/24 Javascript
JavaScript HTML DOM 元素 (节点)新增,编辑,删除操作实例分析
2020/03/02 Javascript
[02:38]DOTA2亚洲邀请赛小组赛精彩集锦:Wings完美团击溃对手
2017/03/29 DOTA
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
如何使用Python调整图像大小
2020/09/26 Python
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
《荷花》教学反思
2014/04/16 职场文书
仲裁协议书
2014/09/26 职场文书
工作证明英文模板
2014/10/21 职场文书
使用javascript解析二维码的三种方式
2021/11/11 Javascript