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实现斐波那契(Fibonacci)函数
Mar 25 Python
使用python编写简单的小程序编译成exe跑在win10上
Jan 15 Python
python flask解析json数据不完整的解决方法
May 26 Python
python进程和线程用法知识点总结
May 28 Python
python导包的几种方法(自定义包的生成以及导入详解)
Jul 15 Python
关于pytorch多GPU训练实例与性能对比分析
Aug 19 Python
pytorch获取vgg16-feature层输出的例子
Aug 20 Python
python 矢量数据转栅格数据代码实例
Sep 30 Python
基于python解线性矩阵方程(numpy中的matrix类)
Oct 21 Python
Python3.x+pyqtgraph实现数据可视化教程
Mar 14 Python
基于python实现把json数据转换成Excel表格
May 07 Python
Python如何使用27行代码绘制星星图
Jul 20 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以json或xml格式返回请求数据的方法
2018/05/31 PHP
javascript 进度条 实现代码
2009/07/30 Javascript
js切换div css注意的细节
2012/12/10 Javascript
Javascript Ajax异步读取RSS文档具体实现
2013/12/12 Javascript
javascript中的this详解
2014/12/08 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
js自定义弹框插件的封装
2020/08/24 Javascript
ReactNative短信验证码倒计时控件的实现代码
2017/07/20 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
2018/05/17 Javascript
详解.vue文件解析的实现
2018/06/11 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
2019/09/07 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
[49:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第二场 3月4日
2021/03/11 DOTA
Python中Random和Math模块学习笔记
2015/05/18 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
Python的迭代器和生成器
2015/07/29 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
python paramiko模块学习分享
2017/08/23 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
Python父目录、子目录的相互调用方法
2019/02/16 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
python科学计算之numpy——ufunc函数用法
2019/11/25 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
程序员经常用到的UNIX命令
2015/04/13 面试题
经管应届生求职信范文
2014/05/18 职场文书
国贸专业求职信
2014/06/28 职场文书