题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增

的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断该数组中是否有该整数。

算法流程如下:

比如一个二维数组array:


1.这个二维数组的左上角是最小的数据,右下角为最大的数,

首先判断查找的数是否number<array[0][0]或number>array[1][1]

2.当number的大小在数组范围内再开始查找,找数组的右上角或者左下角开始

作为比较的基准,当选择左上角的时候,假设我们查找的为number=7

3.如果numbe<9,说明number比最后一列都小,再比较无意义

这时候数组为:

   8

3

4.我们再取右上角的8作为基准,8大于7,再去掉最后一列


5.我们再取右上角的2作为基准,2<7那么,说明第一行再比较无意义,去掉第一行


6.我们再把右上角的4作为基准,4<7那么,去掉第一行


7.现在我们再比较右上角元素,7==7 恩 找到了。

这道题的解法如下:

 bool Find(int* matrix,int rows,int columns,int number)
{
int i,j; if(number>matrix[rows*columns-]||number<matrix[])
return false; i=;
j=columns-; if(number==matrix[i*columns+j])
return true; while()
{ if(number>matrix[i*+j])
{
i++;
}
if(number<matrix[i*+j])
{
j--;
} if(number==matrix[i*columns+j])
return true; if(j<||i<||i>||j>)
break; }
return false;
}

几点注意:

1.查找的时候有的同学可能会问能不能不从右上角开始作为基准。

答案是肯定的,但是只能从右上角和左下角作为基准,为什么?

因为我们选择的基准必须在某个维度上是最大的在某个维度上是

最小的,不然我们就不能根据比较的结果决定是否去掉一行或者去掉一列

2.查找的结束条件是,当我们的右上角元素索引值只要有一个维度的索引值

不在二维数组的正常索引范围内就说明需要查找的元素不在这个数组中。

尤其是第一点,希望读者好好理解。

剑指offer-面试题3.二维数组中的查找的更多相关文章

  1. 剑指offer面试题3 二维数组中的查找(c)

    剑指offer面试题三:

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

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

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

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

  4. 剑指offer面试题3 二维数组中的查找 (java)

    注:java主要可以利用字符串的length方法求出长度解决这个问题带来方便 public class FindNum { public static void main(String[] args) ...

  5. 剑指Offer - 九度1384 - 二维数组中的查找

    剑指Offer - 九度1384 - 二维数组中的查找2013-11-23 23:23 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...

  6. 剑指offer【01】- 二维数组中的查找(Java)

    在经历了春招各大公司的笔试题和面试官的血虐之后,决定要刷一些算法题了,不然连面试机会都没有. 而应对笔试和面试,比较出名的就是剑指offer的题目和LeetCode的题目了.剑指offer应对面试中的 ...

  7. 剑指offer第二版-4.二维数组中的查找

    面试题4:二维数组中的查找 题目要求: 一个二维数组中,每一行从左到右递增,每一列从上到下递增.输入一个整数,判断数组中是否含有该整数 /** * @since 2019年2月13日 下午5:08:5 ...

  8. 剑指Offer编程题1——二维数组中的查找

    剑指Offer编程题1---------------二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完 ...

  9. 【剑指Offer】1、二维数组中的查找

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

  10. 剑指offer(3)——二维数组中的查找

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

随机推荐

  1. Linux中使用mysqldump对MySQL数据库进行定时备份

    #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH expo ...

  2. Android Studio 配置SVN实现代码管理

    Refference From:http://iaiai.iteye.com/blog/2267346 一.Android Studio配置SVN Android Studio关联配置SVN很简单,在 ...

  3. HDU1698 Just a Hook (区间更新)

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. facl笔记

    文件系统访问列表:tom:    tom, tom基本组jerry: other:r-- chown FACL:Filesystem Access Control List利用文件扩展保存额外的访问控 ...

  5. android中创建模拟器的 SDCard

    在eclipse中安装了android环境后,可以直接创建AVD和sdcard的,windows->Android Virtual Device Manager,创建一个AVD时,可以同时创建s ...

  6. C#中通过位运算实现多个状态的判断

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  7. spark二次排序

    数据: 2012,01,01,52012,01,02,452012,01,03,352012,01,04,102012,02,04,102012,02,03,182012,02,01,222012,0 ...

  8. android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法

    最近项目开发中用到了android:launchMode="singleTask" 和 onNewIntent(Intent intent)两个特性,现总结一下经验: androi ...

  9. C++中malloc/free和new/delete 的使用

    malloc/free 的使用要点 函数malloc的原型如下: void * malloc(size_t size); 用malloc申请一块长度为length的整数类型的内存,程序如下: int ...

  10. [RxJS] Using Observable.create for fine-grained control

    Sometimes, the helper methods that RxJS ships with such as fromEvent, fromPromise etc don't always p ...