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 Django做网页
Nov 04 Python
理解Python中的With语句
Feb 02 Python
Python 3.x 新特性及10大变化
Jun 12 Python
python数据结构之图的实现方法
Jul 08 Python
python中Switch/Case实现的示例代码
Nov 09 Python
Python实现的插入排序算法原理与用法实例分析
Nov 22 Python
删除python pandas.DataFrame 的多重index实例
Jun 08 Python
pymongo中group by的操作方法教程
Mar 22 Python
pycharm创建一个python包方法图解
Apr 10 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
Oct 25 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 Python
python Tkinter的简单入门教程
Apr 11 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
推荐文章系统(一)
2006/10/09 PHP
php的header和asp中的redirect比较
2006/10/09 PHP
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
javascript脚本编程解决考试分数统计问题
2008/10/18 Javascript
jquery修改网页背景颜色通过css方法实现
2014/06/06 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
jQuery不使用插件及swf实现无刷新文件上传
2014/12/08 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
详解axios在node.js中的post使用
2017/04/27 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
Python之web模板应用
2017/12/26 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
wxPython多个窗口的基本结构
2019/11/19 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
台湾旅游网站:雄狮旅游网
2017/08/16 全球购物
捐赠仪式主持词
2014/03/19 职场文书
求职信格式要求
2014/05/23 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
学生评语集锦
2015/01/04 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
python程序的组织结构详解
2021/12/06 Python
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android
MySQL sql模式设置引起的问题
2022/05/15 MySQL