当前位置: 首页 > news >正文

【剑指Offer面试题】九度OJ1384:二维数组中的查找

下决心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不通过。

转载于:https://www.cnblogs.com/liguangsunls/p/7096452.html

相关文章:

  • 查看执行计划
  • oracle11g的内存分配不当,导致的错误ORA-01034,ORA-00838,ORA-27101
  • 如何改变oracle的执行计划(HINT)
  • 【Java线程】SwingWorker的用法
  • 如何分析执行计划
  • ipconfig提示不是内部或外部命令
  • ETL模型设计
  • python-函数用法
  • 数据集市
  • 纳税服务系统【自动受理,Quartz任务调度】
  • 小笑话集锦
  • mac下git配置和jenkins打包
  • 三国中最精辟的十句话
  • BFS模版程序
  • 毕业5年决定一生
  • egg(89)--egg之redis的发布和订阅
  • Elasticsearch 参考指南(升级前重新索引)
  • ESLint简单操作
  • Facebook AccountKit 接入的坑点
  • go append函数以及写入
  • HTML5新特性总结
  • httpie使用详解
  • IDEA 插件开发入门教程
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Transformer-XL: Unleashing the Potential of Attention Models
  • 半理解系列--Promise的进化史
  • 分类模型——Logistics Regression
  • 面试总结JavaScript篇
  • 如何学习JavaEE,项目又该如何做?
  • 实现菜单下拉伸展折叠效果demo
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 微信小程序实战练习(仿五洲到家微信版)
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • # C++之functional库用法整理
  • ###C语言程序设计-----C语言学习(3)#
  • $GOPATH/go.mod exists but should not goland
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (九)c52学习之旅-定时器
  • (力扣)循环队列的实现与详解(C语言)
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (五)IO流之ByteArrayInput/OutputStream
  • (学习总结16)C++模版2
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)Oracle存储过程编写经验和优化措施
  • (转)VC++中ondraw在什么时候调用的
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • *2 echo、printf、mkdir命令的应用
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .bashrc在哪里,alias妙用
  • .net程序集学习心得
  • .NET开源快速、强大、免费的电子表格组件
  • .net中我喜欢的两种验证码
  • @AliasFor注解