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自动化构建工具scons使用入门笔记
Mar 10 Python
Python中使用copy模块实现列表(list)拷贝
Apr 14 Python
Python生成8位随机字符串的方法分析
Dec 05 Python
利用Python暴力破解zip文件口令的方法详解
Dec 21 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
python暴力解压rar加密文件过程详解
Jul 05 Python
python字典的遍历3种方法详解
Aug 10 Python
python文件处理fileinput使用方法详解
Jan 02 Python
如何在django中运行scrapy框架
Apr 22 Python
基于keras中的回调函数用法说明
Jun 17 Python
python如何将图片转换素描画
Sep 08 Python
OpenCV-Python实现油画效果的实例
Jun 08 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面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
laravel 模型查询按照whereIn排序的示例
2019/10/16 PHP
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
网页中的图片的处理方法与代码
2009/11/26 Javascript
javascript textarea光标定位方法(兼容IE和FF)
2011/03/12 Javascript
ie支持function.bind()方法实现代码
2012/12/27 Javascript
JavaScript对内存分配及管理机制详细解析
2013/11/11 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
JavaScript如何获取数组最大值和最小值
2015/11/18 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
深入理解vuex2.0 之 modules
2017/11/20 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
[51:14]LGD vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
[42:20]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python内置函数Type()函数一个有趣的用法
2015/02/18 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
《傅雷家书》教学反思
2014/04/20 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书
Vue CLI中模式与环境变量的深入详解
2021/05/30 Vue.js