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局域网ip扫描示例分享
Apr 03 Python
python编写网页爬虫脚本并实现APScheduler调度
Jul 28 Python
Python松散正则表达式用法分析
Apr 29 Python
利用python画一颗心的方法示例
Jan 31 Python
python3 shelve模块的详解
Jul 08 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
在python中用url_for构造URL的方法
Jul 25 Python
Python带参数的装饰器运行原理解析
Jun 09 Python
python实现学生信息管理系统(精简版)
Nov 27 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 Python
pandas map(),apply(),applymap()区别解析
Feb 24 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中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
PHP多个文件上传到服务器实例
2014/10/29 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
javascript 动态设置已知select的option的value值的代码
2009/12/16 Javascript
基于jquery实现的上传图片及图片大小验证、图片预览效果代码
2011/04/12 Javascript
jQuery使用append在html元素后同时添加多项内容的方法
2015/03/26 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
JS实现京东商品分类侧边栏
2020/12/11 Javascript
Python实现的简单万年历例子分享
2014/04/25 Python
python的文件操作方法汇总
2017/11/10 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
通过pykafka接收Kafka消息队列的方法
2018/12/27 Python
python+pyqt5实现24点小游戏
2019/01/24 Python
Python 实现自动导入缺失的库
2019/10/29 Python
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
海量信息软件测试笔试题
2015/08/08 面试题
投标担保书范文
2014/04/02 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
个人廉洁自律总结
2015/03/06 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
女人创业励志语录,句句蕴含能量,激发你的潜能
2019/08/20 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android
Javascript使用integrity属性进行安全验证
2021/11/07 Javascript
win10音频服务未响应怎么解决?win10音频服务未响应未修复的解决方法
2022/08/14 数码科技