剑指offter 数据结构之数组
二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
假如我们要找数字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 数据结构之数组相关推荐
- 剑指offter笔记
剑指offter笔记 数组中重复的数字 二维数组中的查找 替换空格 从尾到头打印链表 递归反转链表解题思路 重建二叉树 用两个栈实现队列 斐波那契数列 青蛙跳台阶问题 旋转数组的最小数字 矩阵中的路径 ...
- 《LeetCode力扣练习》剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java
<LeetCode力扣练习>剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Java 一.资源 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组 ...
- 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java
<LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...
- 剑指 Offer 11. 旋转数组的最小数字 简单
剑指 Offer 11. 旋转数组的最小数字 题目 解题思路 方法(一)直接遍历法 方法(二)二分查找法 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组 ...
- 剑指offer 11. 旋转数组的最小数字(很详细!)
剑指offer 11. 旋转数组的最小数字 题目 解题思路 代码 题目 解题思路 一开始,我们就能直接想到,数组找最小值,那么不轻轻松松直接遍历一遍,用一个变量记录最小值,然后直接返回不就完事了? 但 ...
- 【LeetCode】剑指 Offer 45. 把数组排成最小的数
[LeetCode]剑指 Offer 45. 把数组排成最小的数 文章目录 [LeetCode]剑指 Offer 45. 把数组排成最小的数 package offer;import java.uti ...
- 【LeetCode】剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
[LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 文章目录 [LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 一.双指针 一.双指针 解题思路: ...
- 【LeetCode】剑指 Offer 11. 旋转数组的最小数字
[LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...
- 《剑指offter》
剑指offter 电子书PDF https://github.com/YST521/JZOF.git 最近几天看博客时发现一本叫 剑指offter的书 ,里面主要是一些算法题.这些算法面 ...
最新文章
- js中对arry数组的各种操作小结
- python del函数_干货:Python的内存管理办法
- 鸿蒙os2.0系统什么时候,鸿蒙OS 2.0beta什么时候发布 鸿蒙OS2.0功能介绍
- Java非对称加密KeyPairGenerator类
- java+jvm+log_java8添加并查看GC日志(ParNew+CMS)
- IE6-IE9使用JSON、table.innerHTML 问题
- js 获取页面高度和宽度(兼容 ie firefox chrome),获取鼠标点击位置
- atitit uke产品线 attilax总结.docx 1. 知识聚合 知识检索 产品线	1 2. 爬虫产品线	1 3. 发帖机产品线	1 4. 发动机产品线	1 5. O2o产品线(旅游
- Convert Sorted Array to Binary Search Tree 将有序数组转为二叉搜索树
- 让我们准备祭奠小米帝国
- PHP常用函数大全500+
- MATLAB曲线拟合函数
- 戴尔修复计算机软件,DELL电脑系统恢复工具(Dell OS Recovery Tool)2019 v2.3.6066官方版...
- mysql索引(七)唯一索引
- 4874: 筐子放球
- Tableau柱状图
- JavaScript获取当前时区 时间转换 (实用)
- 监控摄像头与云服务器
- 电视屏幕太伤眼,五个地方降低亮度,来缓解眼睛痛.
- 人生:越是低谷,越要努力