JZ1-二维数组中的查找
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例
输入:
7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
返回值:
true
源代码
方法一:暴力法
class Solution {public:bool Find(int target, vector<vector<int> > array) {for(int i=0;i<array.size();i++){for(int j=0;j<array[0].size();j++){if(target==array[i][j]) return true;}}return false;}
};
复杂度分析:
- 时间复杂度:O(n^2),因为最坏情况下,数组中的元素都需要遍历一次。
- 空间复杂度:O(1)
方法二:二分查找
思路:
设初始值为右上角元素,arr[0][5] = val
如果val == target,直接返回true
如果 tar > val, 说明第 0 行都是无效的,所以val下移到arr[1][5]
如果 tar < val, 说明第 5 列都是无效的,所以val左移到arr[0][4]
class Solution {public:bool Find(int target, vector<vector<int> > array) {int m=array.size();int n=array[0].size();if(m==0||n==0) return false;int r = 0, c = n-1; // 右上角元素while (r<m && c>=0) {if (target == array[r][c]) {return true;}else if (target > array[r][c]) {++r;}else {--c;}}return false;}
};
class Solution {public:bool Find(int target, vector<vector<int> > array) {int m=array.size();int n=array[0].size();if(m==0||n==0) return false;int val;for(int i=0;i<m;i++){val=array[i][n-1];if(target>val) continue;else if(target<val) {n--;for(int j=0;j<n;j++){if(target==array[i][j]) return true;}}else return true;}return false;}
};
两种代码运行通过时间都是7ms。
复杂度分析:
- 时间复杂度:O(m+n) ,其中m为行数,n为列数,最坏情况下,需要遍历m+n次。
- 空间复杂度:O(1)
JZ1-二维数组中的查找相关推荐
- 《剑指Offer》——二维数组中的查找(JZ1)C++
文章目录 前言 题目:JZ1 二维数组中的查找 一.暴力解法 二.优化解法 总结 前言 题目:JZ1 二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序, ...
- 剑指offer:面试题04. 二维数组中的查找
题目:二维数组中的查找 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
- php查找二维数组下标,PHP实现二维数组中的查找算法小结
本文实例讲述了PHP实现二维数组中的查找算法.分享给大家供大家参考,具体如下: 方法1:silu从左下角最后一行的第一个元素开始,遍历.如果小于target 则遍历该行的所有元素,找到结束.如果大于继 ...
- [剑指Offer]5.二维数组中的查找
题目 在一个二维数组中,每一行都依照从左到右递增的顺序排序,每一列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个二维数组和一个整数.推断数组中是否含有该整数. 思路 [算法系列之三十三]杨 ...
- 剑指Offer面试题:2.二维数组中的查找
一 题目:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的二维数组和一个整数判读数组中是否含有该整数. 二 ...
- 算法题001 剑指Offer 面试题三:二维数组中的查找
剑指Offer题目1:二维数组中的查找 题目描述: http://ac.jobdu.com/problem.php?cid=1039&pid=0 在一个二维数组中,每一行都按照从左到右递增的顺 ...
- LeetCode-剑指 Offer 04. 二维数组中的查找
剑指 Offer 04. 二维数组中的查找 思路一:暴力解法,两层for循环查找 时间复杂度为:O(nm) 空间复杂度为:O(1) class Solution {public:bool findNu ...
- 剑指Offer #01 二维数组中的查找(Java描述)
题目来源:牛客网-剑指Offer专题 题目地址:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一 ...
- 面试题4:二维数组中的查找
/******************************************************************* Copyright(c) 2018, htfeng All r ...
- 二维数组中的查找---剑指Offer
二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 代码如下: p ...
最新文章
- 【网络编程】MarioTCP
- 等概率随机函数的实现
- python学到什么程度可以做兼职-Python学到什么程度可以面试工作(解答一)
- VLAD教程和资料 All about VLAD
- echart php mysql简书_echarts-自定义构建
- 用SQL进行用户留存率计算
- keil5安装_keil5,软件安装包及安装教程
- 致各位读者,关于资源的问题
- HTML5 Canvas 高仿逼真 3D 布料图案效果
- php 上一页 下一页代码,php无限上一页,下一页,求完善代码??
- Web常见漏洞修复建议
- MySQL-快速入门(12)备份、还原
- Beta 冲刺(7/7)
- window sserver 2008 r2安装教程
- 【转】强大的矩阵奇异值分解(SVD)及其应用
- Linux学习总结(1)——Linux命令大全完整版
- Homography单应性矩阵原理
- 数据库(Mysql)----mysql查询练习(2、实操)
- 小球碰壁反弹加分_用Java实现小球碰壁反弹的简单实例(算法十分简单)
- 微信小程序商城:解决用户拉新与留存问题
热门文章
- javascript设计模式之发布订阅模式
- Knowing is not enough; we must apply. Willing is not enough; we must do.
- Win7使用之查端口,杀进程
- WCF中NetTCp配置
- SQL Server : 使用SQL Express的User Instance(用户实例)特性
- winscp普通用户向linux根目录中上传文件无法建立远程文件
- 字节跳动教育裁员处理还是挺仗义的!
- 从零实现爬虫和情感分类模型(二)
- 什么时候以及为什么基于树的模型可以超过神经网络模型?
- 【基础】优化背后的数学基础