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正则表达式匹配HTML页面编码
Apr 08 Python
Python中的面向对象编程详解(下)
Apr 13 Python
Python使用redis pool的一种单例实现方式
Apr 16 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 Python
python2 与python3的print区别小结
Jan 16 Python
python实现自主查询实时天气
Jun 22 Python
Python爬虫使用脚本登录Github并查看信息
Jul 16 Python
python实现整数的二进制循环移位
Mar 08 Python
python f-string式格式化听语音流程讲解
Jun 18 Python
对python中GUI,Label和Button的实例详解
Jun 27 Python
python区分不同数据类型的方法
Oct 14 Python
Python socket聊天脚本代码实例
Jan 02 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内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
javascript伸缩菜单栏实现代码分享
2015/11/12 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
2016/11/30 Javascript
jquery easyui DataGrid简单示例
2017/01/23 Javascript
jQuery中复合选择器简单用法示例
2018/03/31 jQuery
Vue实现6位数密码效果
2018/08/18 Javascript
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python正则匹配查询港澳通行证办理进度示例分享
2013/12/27 Python
python简单实现刷新智联简历
2016/03/30 Python
python 字典(dict)按键和值排序
2016/06/28 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
pandas read_excel()和to_excel()函数解析
2019/09/19 Python
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
博士研究生自我鉴定范文
2013/12/04 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
公司领导班子对照材料
2014/08/18 职场文书
党员干部作风建设思想汇报范文
2014/10/25 职场文书
党员倡议书
2015/01/19 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
导游词之崇武古城
2019/10/07 职场文书
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang