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自动化测试之连接几组测试包实例
Sep 28 Python
使用IPython来操作Docker容器的入门指引
Apr 08 Python
python单例模式实例分析
Apr 08 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
Jan 23 Python
Python网络爬虫中的同步与异步示例详解
Feb 03 Python
python集合比较(交集,并集,差集)方法详解
Sep 13 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
Jan 17 Python
Python docx库用法示例分析
Feb 16 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
python日志模块logbook使用方法
Sep 19 Python
python数据爬下来保存的位置
Feb 17 Python
PyChon中关于Jekins的详细安装(推荐)
Dec 28 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连接Access数据库错误及解决方法
2013/06/20 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
两个Javascript小tip资料
2010/11/23 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
js子页面获取父页面数据示例
2014/05/15 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
JavaScript函数作用域链分析
2015/02/13 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
[03:01]完美世界DOTA2联赛PWL S2 集锦第二期
2020/12/03 DOTA
Python 第一步 hello world
2009/09/25 Python
python异步任务队列示例
2014/04/01 Python
python实现类的静态变量用法实例
2015/05/08 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
Python处理CSV与List的转换方法
2018/04/19 Python
tensorflow -gpu安装方法(不用自己装cuda,cdnn)
2020/01/20 Python
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
Java的基础面试题附答案
2016/01/10 面试题
教师专业理论水平的自我评价分享
2013/11/09 职场文书
大学生怎样进行自我评价
2013/12/07 职场文书
半年思想汇报
2013/12/30 职场文书
大一军训感言
2014/01/09 职场文书
教师四风问题对照检查材料
2014/09/26 职场文书
三方合作意向书范本
2015/05/09 职场文书
党支部半年考察意见
2015/06/01 职场文书
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL
vue elementUI表格控制对应列
2022/04/13 Vue.js