下决心AC全部剑指offer面试题。

九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php

书籍:何海涛——《剑指Offer:名企面试官精讲典型编程题》

对于面试题,面试官往往更希望我们能提出优化方法,这样更能体现我们的思维能力以及传说中的“内功”。所以做剑指offer要着重训练这方面,多总结多细究,总是有优点的。加油~


题目链接地址:

http://ac.jobdu.com/problem.php?pid=1384

二维数组中的查找

时间限制:1 秒内存限制:32 兆 特殊判题:否提交:19005解决:3642

题目描写叙述:

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

输入:

输入可能包括多个測试例子,对于每一个測试案例,

输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数。

输入的第二行包括一个整数t(1<=t<=1000000):代表要查找的数字。

接下来的m行,每行有n个数。代表题目所给出的m行n列的矩阵(矩阵如题目描写叙述所看到的,每一行都依照从左到右递增的顺序排序,每一列都依照从上到下递增的顺序排序。

输出:

相应每一个測试案例。

输出”Yes”代表在二维数组中找到了数字t。

输出”No”代表在二维数组中没有找到数字t。

例子输入:

3 3

5

1 2 3

4 5 6

7 8 9

3 3

1

2 3 4

5 6 7

8 9 10

3 3

12

2 3 4

5 6 7

8 9 10

例子输出:

Yes

No

No


在九度OJ上提交通过剑指offer上的面试题3。

当我们须要解决一个复杂的问题时,一个非常有效的办法就是从一个详细的问题入手。通过分析简单详细的例子,试图寻找普遍的规律。

规律:

首先选取数组中右上角的数字。假设该数字等于要查找的数字。查找过程结束返回true;假设该数字大于要查找的数字。该列的元素肯定都大于要查找的数字,剔除这个数字所在的列;假设该数字小于要查找的数字,剔除这个数字所在的行。也就是说假设要查找的数字不在数组的右上角,则每一次都在数组的查找范围中剔除一行或者一列。这样每一步都能够缩小查找的范围,直到找到要查找的数字,或者查找范围为空返回fasle。


C++实现:

/*********************************
-----------------------------------
【剑指Offer面试题】二维数组中的查找
-----------------------------------
Author:牧之丶 Date:2015年
Email:bzhou84@163.com
**********************************/
#include <stdio.h>
#include <iostream>
using namespace std;
/*
二维数组matrix中查找是否有number
*/
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;
} int main()
{
int m,n;
while(scanf("%d %d",&m,&n) != EOF)
{
int t,i;
int matrix[1000*1000] = {0};
scanf("%d",&t);
for(i=0;i<m*n;i++)
scanf("%d",matrix+i);
bool result = Find(matrix,m,n,t);
if(result)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
/**************************************************************
Problem: 1384
Language: C++
Result: Accepted
Time:850 ms
Memory:5356 kb
****************************************************************/

这里仅仅能用scanf printf输入输出,用cin cout測试为Time Limit Exceed不通过。

【剑指Offer面试题】九度OJ1384:二维数组中的查找的更多相关文章

  1. 《剑指offer》— JavaScript(1)二维数组中的查找

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

  2. 《剑指offer》第四题(二维数组中的查找)

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

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

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

  4. 剑指Offer面试题:32.数字在排序数组中出现的次数

    一.题目:数字在排序数组中出现的次数 题目:统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4. 二.解题思路 2 ...

  5. 【剑指offer 面试题38】数字在排序数组中出现的次数

    思路: 利用二分查找,分别查找待统计数字的头和尾的下标,最后做差加一即为结果. C++: #include <iostream> #include <vector> using ...

  6. 《剑指Offer》面试题-二维数组中的查找

    题目1384:二维数组中的查找 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:7318 解决:1418 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到 ...

  7. 【剑指offer】面试题 4. 二维数组中的查找

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

  8. 剑指Offer:面试题3——二维数组中的查找(java实现)

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

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

    // 面试题4:二维数组中的查找 // 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按 // 照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 // 整数 ...

随机推荐

  1. 23 HBase 存储架构。

    个 Region,Region会下线,新Split出的2个子Region会被HMaster分配到相应的HRegionServer 上,使得原先1个Region的压力得以分流到2个Region上由此过程 ...

  2. 大数据时代的新BI系统架构发展趋势

    商业智能(BI,Business Intelligence).它是一套完整的解决方式,用来将企业中现有的数据进行有效的整合,高速准确的提供报表并提出决策根据.帮助企业做出明智的业务经营决策.     ...

  3. 《AndroidStudio每日一贴》7. 怎样将本地变更文件移到其他的changelist?

    操作方法: 进入Version Control -> Local Changes ,会显示本地变更列表分组. 假设你想将某个changelist中的文件转移到其他的changelist, 选中此 ...

  4. Array 对象常用的方法总结

    shift:删除原数组的第一项,返回删除元素的值:如果数组为空则返回undefined var arr = [1, 2, 3, 4, 5]; var out = arr.shift(); consol ...

  5. 104.virtual虚函数多态与异构数据结构

    #include "mainwindow.h" #include <QApplication> #include <list> #include <Q ...

  6. Gym - 100637B Lunch 规律

    题意:n个点,给定起点和终点,可以每次可以走一格或两格,走一格则需要一个代价,每个格子只能走一次,问从起点到终点并经过每一个点的最小代价 思路:这题我没看出什么道理,先打了个暴力,结果发现了个相当坑的 ...

  7. request获取各种路径总结、页面跳转总结。

    页面跳转总结 JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使 ...

  8. Python之路:画空心矩形

    1.if语句中当要判断多个语句成立才能执行语句时候,可以用or(或,只要其中一个成立就可以执行下一条语句)或者and(只要有其中一个不成立就不会执行下一条语句) 2.在Python中range函数会产 ...

  9. 紫书 习题 10-25 UVa 1575 (有重复元素的全排列+暴搜)

    我一开始以为有什么很牛逼的方法来做,然后一直没有思路 后来看了https://blog.csdn.net/zju2016/article/details/78562932的博客 竟然是暴搜?????? ...

  10. 树莓派开机运行Python脚本 控制LED灯闪烁

    一.新建一个开机运行文件 在 /home/pi/.config 下创建一个文件夹,名称为 autostart,并在该文件夹下创建一个led.desktop文件(文件名以.desktop结尾) 编辑le ...