[剑指offer] 1. 二维数组中的查找 (数组)

注意是有序数组!!
思路:
1.利用二维数组由上到下,由左到右递增的规律,选取右上角或者左下角的元素a[m][n]与target进行比较,
当target小于元素a[m][n]时,那么target必定在元素a所在行的左边,即n-1;当target大于元素a[m][n]时,那么target必定在元素a所在列的下边,即m+1;# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
m=0
n=len(array[0])-1 #右上角开始判断
while m<=len(array)-1 and n>=0:
if array[m][n]>target:
n-=1
elif array[m][n]<target:
m+=1
else:
return True
return False
上述m,n的位置不能互换,否则无法通过,以右上角起始位置来判断。
不过花了295ms, 用java的<1ms !!!
2.把每一行看成有序递增的数组,利用二分查找,遍历每一行,时间复杂度是nlogn.
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
for i in range(0,len(array)):
low=0
high=len(array[0])-1
while low<=high:
mid=(high+low)/2
if array[i][mid]>target:
high=mid-1
elif array[i][mid]<target:
low=mid+1
else:
return True
return False
注意二分法中,在每行的循环中,再赋值low和high。
其次注意 千万不要漏掉条件:while low<=high:
但是速度还是很慢,最终耗时418ms。
[剑指offer] 1. 二维数组中的查找 (数组)的更多相关文章
- 剑指offer:二维数组中的查找
目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺 ...
- 剑指 Offer 04. 二维数组中的查找 (思维)
剑指 Offer 04. 二维数组中的查找 题目链接 本题的解法是从矩阵的右上角开始寻找目标值. 根据矩阵的元素分布特性, 当目标值大于当前位置的值时将row行号++,因为此时目标值一定位于当前行的下 ...
- 《剑指offer》 二维数组中的查找
本题目是<剑指offer>中的题目 二维数组中的查找 题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...
- 【Java】 剑指offer(3) 二维数组中的查找
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上 ...
- [剑指Offer]5.二维数组中的查找
题目 在一个二维数组中,每一行都依照从左到右递增的顺序排序,每一列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个二维数组和一个整数.推断数组中是否含有该整数. 思路 [算法系列之三十三]杨 ...
- 《剑指Offer 1.二维数组中的查找》2019-03-25
剑指Offer 第一题 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数 ...
- Go语言实现:【剑指offer】二维数组中的查找
该题目来源于牛客网<剑指offer>专题. 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一 ...
- 剑指offer之 二维数组的查找
package Problem3; public class Find { /* * 题目描述:二维数组中的查找 * 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排 ...
- 剑指offer系列——二维数组中,每行从左到右递增,每列从上到下递增,设计算法找其中的一个数
题目:二维数组中,每行从左到右递增,每列从上到下递增,设计一个算法,找其中的一个数 分析: 二维数组这里把它看作一个矩形结构,如图所示: 1 2 8 2 4 9 12 4 7 10 13 6 8 11 ...
- 【剑指offer】二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 注意点:要注意特殊 ...
随机推荐
- Django入门--模型系统(一):模型基础
1.Django的ORM介绍 对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不 ...
- httpClient 几种超时问题
HttpClient的有3种超时时间,分别是: 1. [java] view plaincopyprint? ConnManagerParams.setTimeout(params, 1000); C ...
- C++调用C#编写的DLL【转】
1.打开VS新建项目 2.在新建项目窗口中选择其他语言->Visual C++->Win 32控制台应用程序,设置名称:MathCon,设置解决方案名:MathCon,这个名字随便你自己取 ...
- CF909A Generate Login
CF909A Generate Login 题意翻译 给定两个用空格分隔的字符串,分别取两字符串的任意非空前缀,将两前缀合并为一个新的字符串,求可行字典序最小的字符串. 题目描述 The prefer ...
- ZOJ 3633 Alice's present RMQ
Alice's present Description As a doll master, Alice owns a wide range of dolls, and each of them ha ...
- nginx报 File not found 错误
原因可能非常多,但对于刚開始学习的人.大部分应该是/etc/nginx/conf.d/default.conf里面的php解析部分配置不正确. 解决的话就是把root定义.在server下加上,这样r ...
- OzymanDNS 使用——perl 5.22没有成功。。。
最初官方的代码没有找到,但是发现github里貌似有: git clone https://github.com/splitbrain/dnstunnel.git 源码是perl写的,需要安装一些pe ...
- Statspack的使用
Statspack是Oracle 8i以上提供的一个非常好的性能监控与诊断工具,基本上全部包含了BSTAT/ESTAT的功能,更多的信息可以参考附带文档$ORACLE_HOME/rdbms/admin ...
- crawler4j详细配置
控制器类必须传一个类型为CrawlConfig的参数,用于配置crawler4j.下面描述了一些关于配置的细节. 抓取深度 默认情况下没有抓取深度的限制.可以通过配置来限制深度,比如,你有个种子页面A ...
- MyEclipse安装TestNG
1.获取TestNG运行包. (1).直接下载*.jar包并导入项目中. (2).maven下载. http://testng.org/doc/download.html 2.为IDE加载TestNG ...