二维数组中的查找

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

假如我们要找数字7,由于矩阵是行和列都是从小到大的排列,右边的列一定大于左边的,下边的行一定大于上边的。因此我们可用从右上角或者左下角开始扫描。
如果我们从右上角开始扫描,9 > 7,那么7就不可能在9这一列,该列可以排除,往左一列查找,同理,8 > 7,也排除。
直到,2 < 7,说明,7一定不在2这一行(因为2在该行是最大的了),排除该行,往下一行查找。
以此类推,我们总结的技巧:
数字>7的,排除该列
数字<7的,排除该行


矩阵中加阴影背景的区域是下一步查找的范围。

注意这里我们为什么不能选左上和右下为起点,因为两个起点的数字,是该行列最大或最小的数字,因为我们无法排查缩小范围。
只有该数字是该行最大同时是该列最小,或者是该列最大同时是该行最小,这样的数字才有缩小范围的意义!!!

C++源码:

bool Find(int* matrix, int rows, int columns, int number) {bool found = false;if(matrix != NULL && rows > 0 && columns > 0) {int row = 0;int column = columns - 1;while(row < rows && column >=0) {if(matrix[row * columns + column] == number) {found = true;break;} else if(matrix[row * columns + column] > number)                                      -- column; else                       ++ row;}}return found;
}

更多学习笔记,欢迎关注微信公众号『码蜂说』

剑指offter 数据结构之数组相关推荐

  1. 剑指offter笔记

    剑指offter笔记 数组中重复的数字 二维数组中的查找 替换空格 从尾到头打印链表 递归反转链表解题思路 重建二叉树 用两个栈实现队列 斐波那契数列 青蛙跳台阶问题 旋转数组的最小数字 矩阵中的路径 ...

  2. 《LeetCode力扣练习》剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java

    <LeetCode力扣练习>剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java 一.资源 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组 ...

  3. 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java

    <LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...

  4. 剑指 Offer 11. 旋转数组的最小数字 简单

    剑指 Offer 11. 旋转数组的最小数字 题目 解题思路 方法(一)直接遍历法 方法(二)二分查找法 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组 ...

  5. 剑指offer 11. 旋转数组的最小数字(很详细!)

    剑指offer 11. 旋转数组的最小数字 题目 解题思路 代码 题目 解题思路 一开始,我们就能直接想到,数组找最小值,那么不轻轻松松直接遍历一遍,用一个变量记录最小值,然后直接返回不就完事了? 但 ...

  6. 【LeetCode】剑指 Offer 45. 把数组排成最小的数

    [LeetCode]剑指 Offer 45. 把数组排成最小的数 文章目录 [LeetCode]剑指 Offer 45. 把数组排成最小的数 package offer;import java.uti ...

  7. 【LeetCode】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

    [LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 文章目录 [LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 一.双指针 一.双指针 解题思路: ...

  8. 【LeetCode】剑指 Offer 11. 旋转数组的最小数字

    [LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...

  9. 《剑指offter》

    剑指offter 电子书PDF        https://github.com/YST521/JZOF.git 最近几天看博客时发现一本叫 剑指offter的书 ,里面主要是一些算法题.这些算法面 ...

最新文章

  1. js中对arry数组的各种操作小结
  2. python del函数_干货:Python的内存管理办法
  3. 鸿蒙os2.0系统什么时候,鸿蒙OS 2.0beta什么时候发布 鸿蒙OS2.0功能介绍
  4. Java非对称加密KeyPairGenerator类
  5. java+jvm+log_java8添加并查看GC日志(ParNew+CMS)
  6. IE6-IE9使用JSON、table.innerHTML 问题
  7. js 获取页面高度和宽度(兼容 ie firefox chrome),获取鼠标点击位置
  8. atitit uke产品线 attilax总结.docx 1. 知识聚合 知识检索 产品线 1 2. 爬虫产品线 1 3. 发帖机产品线 1 4. 发动机产品线 1 5. O2o产品线(旅游
  9. Convert Sorted Array to Binary Search Tree 将有序数组转为二叉搜索树
  10. 让我们准备祭奠小米帝国
  11. PHP常用函数大全500+
  12. MATLAB曲线拟合函数
  13. 戴尔修复计算机软件,DELL电脑系统恢复工具(Dell OS Recovery Tool)2019 v2.3.6066官方版...
  14. mysql索引(七)唯一索引
  15. 4874: 筐子放球
  16. Tableau柱状图
  17. JavaScript获取当前时区 时间转换 (实用)
  18. 监控摄像头与云服务器
  19. 电视屏幕太伤眼,五个地方降低亮度,来缓解眼睛痛.
  20. 人生:越是低谷,越要努力

热门文章

  1. 拉伯证券|A股延续强势格局 北向资金开年以来净买入超1500亿元
  2. 边分治学习笔记(bzoj2870)
  3. 1vrms等于多少伏
  4. Multisim的元器件模型的更换
  5. svn安装并用eclipse集成
  6. hbase major compact脚本
  7. puzzle(0211)几何划分问题
  8. Jhipster介绍和使用
  9. 谷歌浏览器的页面保存为图片
  10. 全自动过滤器:全自动过滤器工作原理