剑指Offer-1.二维数组中的查找(C++/Java)
题目:
分析:
判断二维数组中是否有给定元素,暴力解的话时间复杂度O(n^2),无法通过测试。
所给的二维数组实际上是有序的,每一行从左至右是递增的,而每一列从上到下是递增的,利用这个特性我们可以更快速的求解此问题。
我们可以从右上角的元素开始和所给的整数去比较,因为右上角的元素有这样一个特性,它左边的元素都比它小,而下面的元素都比它大,如果给定的整数比它大,意味着这一行的元素都比它小,也就不可能再有这个整数了,而给定的整数如果比它小,这一列的元素都比它大,也不会含有这个整数,我们每一次的比较,都可以排除一行,或一列元素,这样的效率是很高的。
target = 11,二维数组如下:
[1,3, 5,7]
[10,11,16,20]
[23,30,34,50]
首先比较7 < 11,所以我们排除第一行,比较本列的下一个元素。
[1,3, 5,7]
[10,11,16,20]
[23,30,34,50]
因为20 > 11,所以我们排除这一列,比较本行的前一个元素。
[1,3, 5,7]
[10,11,16,20]
[23,30,34,50]
同理,排除16所在的那列,继续比较本行的前一个元素。
[1,3, 5,7]
[10,11,16,20]
[23,30,34,50]
最后找到11这个元素,返回true即可。时间复杂度是O(m+n),即二维数组的行列之和。
程序:
C++
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if(array.empty()) return false;
int m = array.size();
int n = array[].size();
int x = ;
int y = n-;
while(x < m && y >= ){
if(array[x][y] > target){
y--;
}
else if(array[x][y] < target){
++x;
}
else{
return true;
}
}
return false;
}
};
Java
public class Solution {
public boolean Find(int target, int [][] array) {
if(array == null) return false;
int m = array.length;
int n = array[0].length;
int x = 0;
int y = n-1;
while(x < m && y >= 0){
if(array[x][y] > target){
--y;
}
else if(array[x][y] < target){
++x;
}
else{
return true;
}
}
return false;
}
}
剑指Offer-1.二维数组中的查找(C++/Java)的更多相关文章
- 剑指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】二维数组中的查找
题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 注意点:要注意特殊 ...
- 剑指Offer 1. 二维数组中的查找 (数组)
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
- 剑指offer(2) - 二维数组中的查找
题目: 在一个二维数组中.每一行都依照从左到右递增的顺序排序,每一列都依照从上往下递增的顺序排序.请写一个函数,输入一个二维数组和一个整数,推断数组中是否含有该整数. 比如以下的二维数组就是每行.每列 ...
随机推荐
- Winclone 8 Mac增强汉化版 Windows分区备份迁移工具 8.0.1
winclone 8 for Mac版是一款系统清理工具winclone的Mac平台版本,winclone Mac版可以将Bootcamp分区安装的windows进行克隆也可将克隆文件传回Bootca ...
- python中copy()和deepcopy()详解
**首先直接上结论: —–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在.所以改变原有被复制对象不会对已经复制出来的新对象产生影响.—–而浅复制并不会产生一个独立的 ...
- 05_javaSE面试题:成员变量和局部变量
题目 /** * 类变量:static修饰的 * 实例变量:不是static修饰的 * * 局部变量:栈 * 实例变量:堆 * 类变量:方法区 * @author kevin * @date 2019 ...
- 04_javaSE面试题:方法的参数传递机制
题目 import java.util.Arrays; /** * @author kevin * @date 2019/7/10 9:46 */ public class Exam4 { publi ...
- 【洛谷4585】[FJOI2015] 火星商店问题(线段树分治)
点此看题面 大致题意: 有\(n\)家店,每个商品有一个标价.每天,都可能有某家商店进货,也可能有某人去购物.一个人在购物时,会于编号在区间\([L_i,R_i]\)的商店里挑选一件进货\(d_i\) ...
- Java实现编辑距离算法
Java实现编辑距离算法 编辑距离,又称Levenshtein距离(莱文斯坦距离也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它 ...
- linux学习之Ubuntu
查看自己的ubuntu版本,输入以下命令(我的都是在root用户下的,在普通用户要使用sudo)第一行的lsb是因为没有安装LSB,安装之后就不会出现这个东西.LSB(Linux Standards ...
- PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection
URL: https://arxiv.org/abs/1608.08021 year: 2016 TL;DR PVANet 一个轻量级多物体目标检测架构, 遵循 "less channels ...
- MySQL GROUP BY 的问题
拿 employee 示例数据库为例,当进行如下操作时会报错. mysql> SELECT * FROM employees GROUP BY gender; ERROR 1055 (42000 ...
- 315道Python常见面试题
第一部分,Python基础篇 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C++等其他语言的对比? 简述解释型和编译型编程语言? Python ...