文章标题
2016-04-02 10:11
225 查看
今天看了《剑指Offer》的面试题3,还是很有收获的。题目是一个二维数组,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
初看的时候,我也是看得云里雾里。但是当作者将思路引导了右上角的时候,顿时就有豁然开朗的感觉。正是因为每一行从左到右依次递增,每一行从上到下依次递增,这样的话,抓住右上角的数字与待查找数字进行比较,就相当于抓住了“牛鼻子”。若右上角数字等于待查找数字,那再好不过了,直接返回true就是了;若右上角数字大于待查找数字,那么就知道,右上角数字的这一列的每一个数都比待查找数字大(因为右上角数字本身就是所在列的最小值),所以这一列就可以排除掉了;若右上角数字小于待查找数字,那么右上角数字的所在行就可以被排除掉了(因为右上角数字本身就是所在行的最大值)。
这样的思路理清楚了之后,就好办了,代码就是书中给的代码了:
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(column>=0&&row
初看的时候,我也是看得云里雾里。但是当作者将思路引导了右上角的时候,顿时就有豁然开朗的感觉。正是因为每一行从左到右依次递增,每一行从上到下依次递增,这样的话,抓住右上角的数字与待查找数字进行比较,就相当于抓住了“牛鼻子”。若右上角数字等于待查找数字,那再好不过了,直接返回true就是了;若右上角数字大于待查找数字,那么就知道,右上角数字的这一列的每一个数都比待查找数字大(因为右上角数字本身就是所在列的最小值),所以这一列就可以排除掉了;若右上角数字小于待查找数字,那么右上角数字的所在行就可以被排除掉了(因为右上角数字本身就是所在行的最大值)。
这样的思路理清楚了之后,就好办了,代码就是书中给的代码了:
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(column>=0&&row
相关文章推荐
- 一个关于if else容易迷惑的问题
- Lua中使用二维数组实例
- 一道sql面试题附答案
- C# 超高面试题收集整理
- C#使用二维数组模拟斗地主
- C#二维数组基本用法实例
- 人人网javascript面试题 可以提前实现下
- javascript的日期对象、数组对象、二维数组使用说明
- PHP中设置一个严格30分钟过期Session面试题的4种答案
- PHP 如何获取二维数组中某个key的集合
- 改写函数实现PHP二维/三维数组转字符串
- 据说是雅虎的一份PHP面试题附答案
- php牛逼的面试题分享
- 一套比较完整的javascript面试题(部分答案)
- java 二维数组矩阵乘法的实现方法
- Swift中定义二维数组的方法及遍历方法示例
- 10个经典的Java main方法面试题
- 举例理解C语言二维数组的指针指向问题
- C#和Java中二维数组区别分析
- 小米公司JavaScript面试题