题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

示例

输入:

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-二维数组中的查找相关推荐

  1. 《剑指Offer》——二维数组中的查找(JZ1)C++

    文章目录 前言 题目:JZ1 二维数组中的查找 一.暴力解法 二.优化解法 总结 前言 题目:JZ1 二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序, ...

  2. 剑指offer:面试题04. 二维数组中的查找

    题目:二维数组中的查找 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  3. php查找二维数组下标,PHP实现二维数组中的查找算法小结

    本文实例讲述了PHP实现二维数组中的查找算法.分享给大家供大家参考,具体如下: 方法1:silu从左下角最后一行的第一个元素开始,遍历.如果小于target 则遍历该行的所有元素,找到结束.如果大于继 ...

  4. [剑指Offer]5.二维数组中的查找

    题目 在一个二维数组中,每一行都依照从左到右递增的顺序排序,每一列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个二维数组和一个整数.推断数组中是否含有该整数. 思路 [算法系列之三十三]杨 ...

  5. 剑指Offer面试题:2.二维数组中的查找

    一 题目:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的二维数组和一个整数判读数组中是否含有该整数. 二 ...

  6. 算法题001 剑指Offer 面试题三:二维数组中的查找

    剑指Offer题目1:二维数组中的查找 题目描述: http://ac.jobdu.com/problem.php?cid=1039&pid=0 在一个二维数组中,每一行都按照从左到右递增的顺 ...

  7. LeetCode-剑指 Offer 04. 二维数组中的查找

    剑指 Offer 04. 二维数组中的查找 思路一:暴力解法,两层for循环查找 时间复杂度为:O(nm) 空间复杂度为:O(1) class Solution {public:bool findNu ...

  8. 剑指Offer #01 二维数组中的查找(Java描述)

    题目来源:牛客网-剑指Offer专题 题目地址:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一 ...

  9. 面试题4:二维数组中的查找

    /******************************************************************* Copyright(c) 2018, htfeng All r ...

  10. 二维数组中的查找---剑指Offer

    二维数组中的查找 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 代码如下: p ...

最新文章

  1. 【网络编程】MarioTCP
  2. 等概率随机函数的实现
  3. python学到什么程度可以做兼职-Python学到什么程度可以面试工作(解答一)
  4. VLAD教程和资料 All about VLAD
  5. echart php mysql简书_echarts-自定义构建
  6. 用SQL进行用户留存率计算
  7. keil5安装_keil5,软件安装包及安装教程
  8. 致各位读者,关于资源的问题
  9. HTML5 Canvas 高仿逼真 3D 布料图案效果
  10. php 上一页 下一页代码,php无限上一页,下一页,求完善代码??
  11. Web常见漏洞修复建议
  12. MySQL-快速入门(12)备份、还原
  13. Beta 冲刺(7/7)
  14. window sserver 2008 r2安装教程
  15. 【转】强大的矩阵奇异值分解(SVD)及其应用
  16. Linux学习总结(1)——Linux命令大全完整版
  17. Homography单应性矩阵原理
  18. 数据库(Mysql)----mysql查询练习(2、实操)
  19. 小球碰壁反弹加分_用Java实现小球碰壁反弹的简单实例(算法十分简单)
  20. 微信小程序商城:解决用户拉新与留存问题

热门文章

  1. javascript设计模式之发布订阅模式
  2. Knowing is not enough; we must apply. Willing is not enough; we must do.
  3. Win7使用之查端口,杀进程
  4. WCF中NetTCp配置
  5. SQL Server : 使用SQL Express的User Instance(用户实例)特性
  6. winscp普通用户向linux根目录中上传文件无法建立远程文件
  7. 字节跳动教育裁员处理还是挺仗义的!
  8. 从零实现爬虫和情感分类模型(二)
  9. 什么时候以及为什么基于树的模型可以超过神经网络模型?
  10. 【基础】优化背后的数学基础