【剑指offer-解题系列(1)】二维数组中的查找
来源:互联网 发布:手机淘宝旧版本5.8 编辑:程序博客网 时间:2024/06/06 03:45
题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析:
由于二维数组是排好序的,一定是要采用和二分查找相似的思想,一维数组是找中间数,二维数组也是找中间数。而中间数就是逆对角线上的数!(左下角,或是右上角)。
这样一次就能排除一行或是一列,对于n*n的矩阵,复杂度O(n)。
1
2
3
4
5
6
4
5
5
7
9
12
5
6
6
8
12
13
6
7
7
9
12
16
代码实现:
bool Find(int target, vector<vector<int> > array)
{
int rows = array.size();
if(rows<=0)
return false;
int cols = array[0].size();
int mid_i= rows-1,mid_j = 0 ; //从左下角坐标开始查找
while( mid_i >=0 && mid_j <= cols-1){
if(array [mid_i][mid_j] == target){//查找成功
return true;
}
else if(array [mid_i][mid_j] < target){//数较小,排除这一列,列+1
mid_j++;
}
else{
mid_i--;//数较大,行-1
}
}
return false;
}
{
int rows = array.size();
if(rows<=0)
return false;
int cols = array[0].size();
int mid_i= rows-1,mid_j = 0 ; //从左下角坐标开始查找
while( mid_i >=0 && mid_j <= cols-1){
if(array [mid_i][mid_j] == target){//查找成功
return true;
}
else if(array [mid_i][mid_j] < target){//数较小,排除这一列,列+1
mid_j++;
}
else{
mid_i--;//数较大,行-1
}
}
return false;
}
阅读全文
0 0
- 【剑指offer-解题系列(1)】二维数组中的查找
- 剑指offer系列-二维数组中的查找
- 剑指offer系列之1:二维数组中的查找
- 【剑指Offer】二维数组中的查找 解题报告
- 剑指offer第一题:二维数组中的查找解题报告
- 剑指offer 1 二维数组中的查找
- 剑指offer[1]二维数组中的查找
- 剑指offer(1):二维数组中的查找
- 剑指offer(二维数组中的查找)
- 二维数组中的查找(剑指offer)
- 《剑指offer系列》面试题目3:二维数组中的查找
- 剑指offer系列源码--二维数组中的查找
- 剑指Offer系列---(5)二维数组中的查找
- 【剑指offer系列】 二维数组中的查找___3
- 剑指Offer系列-面试题3:二维数组中的查找
- 牛客网 剑指offer解题笔记 (一)二维数组中的查找
- 剑指offer(1)-二维数组中的查找
- 剑指Offer——(1)二维数组中的查找
- 图像拼接基本步骤
- 分布式架构学习之:035--MyCat在MySQL主从复制基础上实现读写分离
- angular对象简单介绍
- Linux常用的配置文件
- 镜像下载
- 【剑指offer-解题系列(1)】二维数组中的查找
- Mybatis 多对多表关联
- Hadoop入门
- RHCE培训笔记
- Git总结笔记1-搭建和使用30条简明笔记
- Linux总结笔记1-常用命令及脚本基础
- Linux总结笔记2-用户管理及权限管理
- 【自然语言处理】句法分析 (syntactic parsing) 在 NLP 领域的应用是怎样的?
- Chrome 控制台console的用法