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连接sql server乱码的解决方法
Jan 28 Python
python分割文件的常用方法
Nov 01 Python
python下调用pytesseract识别某网站验证码的实现方法
Jun 06 Python
python实现下载整个ftp目录的方法
Jan 17 Python
Python中单、双下划线的区别总结
Dec 01 Python
使用pandas对两个dataframe进行join的实例
Jun 08 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
pytorch1.0中torch.nn.Conv2d用法详解
Jan 10 Python
vscode写python时的代码错误提醒和自动格式化的方法
May 07 Python
Python读写csv文件流程及异常解决
Oct 20 Python
详解python爬取弹幕与数据分析
Nov 14 Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 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
DC的38部超级英雄动画电影
2020/03/03 欧美动漫
phpmyadmin里面导入sql语句格式的大量数据的方法
2010/06/05 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
php实现在服务器端调整图片大小的方法
2015/06/16 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
jQuery动态星级评分效果实现方法
2015/08/06 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
[51:17]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第二场 10月30日
2020/10/31 DOTA
python 遍历pd.Series的index和value
2019/11/26 Python
关于pytorch中全连接神经网络搭建两种模式详解
2020/01/14 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
python 如何快速复制序列
2020/09/07 Python
python switch 实现多分支选择功能
2020/12/21 Python
国际知名设计师时装商店:Coggles
2016/09/05 全球购物
综合素质的自我鉴定
2013/10/07 职场文书
评析教师个人的自我评价
2014/02/19 职场文书
最新结婚典礼主持词
2014/03/14 职场文书
中学优秀班主任事迹材料
2014/05/01 职场文书
租赁协议书
2015/01/27 职场文书
三峡导游词
2015/01/31 职场文书
学校中秋节活动总结
2015/03/23 职场文书
python 经纬度求两点距离、三点面积操作
2021/06/03 Python
mysql通过group by分组取最大时间对应数据的两种有效方法
2022/09/23 MySQL