题目:

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

需要与面试官确认的是,这个二维数组的元素是否存在重复情况,如何处理重复情况。

解题思路:

1.判断待查找整数与矩阵的左上角的最小元素以及右下角的最大元素,如果没在他们之间则直接返回没有找到。

2.选取数组中右上角的数字,如果该数字等于要查找的数字,则查找过程结束;

3.如果该数字大于要查找的数字,则剔除这个数字所在的列;

4.如果该数字小于要查找的数字,则剔除这个数字所在的行。

也就是说:如果要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一列或者一行,这样每一步都可以缩小查找的范围,直到找到要查找的数字或者查找范围为空。

bool Find(int *matrix, int rows, int columns, int number)
{
if(number < matrix[0][0] || number > matrix[rows-1][columns-1] ) return false; else {
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;
}

参考:《剑指Offer》

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

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

    剑指offer面试题三:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. JS 传各种文件到后端

    由于要写一个前端上传文件按钮功能,本人前端是小白,所以在网上搜索了许多,发现FileReader非常好用. 不多BB,直接来. 1,前端只需要一个input标签, <input type=&qu ...

  2. mysql 的安装,密码及修改 ,权限,基础语句(增删改查)

    参考网址:https://www.cnblogs.com/majj/p/9160383.html    (安装等) https://www.cnblogs.com/majj/p/9160421.htm ...

  3. Executor框架(六)CompletionService 接口

      CompletionService 接口是一个独立的接口,并没有扩展 ExecutorService . 其默认实现类是ExecutorCompletionService;   接口 Comple ...

  4. python+selenium:iframe框架中多种定位

    方法一:通过索引,id,name,WebElement定位 from selenium import webdriverdriver = webdriver.Firefox()driver.switc ...

  5. python入门-字典

    1 python是使用{}来表示字典 字典是一系列的键值对 alien_0={} 2 访问字典中的值 new_point = alien_0['point'] print("you just ...

  6. OpenACC Julia 图形

    ▶ 书上的代码,逐步优化绘制 Julia 图形的代码 ● 无并行优化(手动优化了变量等) #include <stdio.h> #include <stdlib.h> #inc ...

  7. redis、memcache和mongodb各自的优缺点是什么

    redis.memcahce 比较相似,但与 mongodb 完全不同,几乎没有可比性. 总的来说 redis/memcache 是基于内存的,讲究的是性能,多用作缓存层,比如说存放session.而 ...

  8. Using Celery with Django

    参考1: http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html#using-celery-with-d ...

  9. 笔记本 F1 键盘

    笔记本 F1 键盘与传统不符. 在控制面板,键盘设置,选择ok.

  10. HTML网页Table解析

    procedure TForm27.Button1Click(Sender: TObject); var doc2: IHTMLDocument2; doc3: IHTMLDocument3; ita ...