九度 1384 二维数组中的查找

#include<cstdio>
#include<iostream>
using namespace std;
#define NMAX 1000010
int arr[NMAX];
/**
 * 只需要从左下角或右上角开始查找,即可。
 * 当是从右上角开始查找时,
 * 左上角(row = 0,column = columns - 1),
 * 1)若查找的值key大于当前的值arr[i],则说明key在此行以下,故有row++;
 * 2)若查找的值key小于当前的值arr[i],则说明key在此列的左边,故有column--;
 * 3)若相等,则返回true
 * 4)判断条件:row<rows && column >=0,若满足,继续1),若不满足,则直接返回false
 */
bool query(int rows, int columns, int key) {
    bool flag = false;
    int column = columns - 1;
    int row = 0;
    while (row < rows && column >= 0) {
        int temp = arr[row * columns + column];
        if (temp == key) {
            flag = true;
            return flag;
        } else if (temp > key) {
            column--;
        } else {
            row++;
        }
    }
    return flag;
}
/**
 * 当是从左下角开始查找时,
 * 左上角(row = rows - 1,column = 0),
 * 1)若查找的值key小于当前的值arr[i],则说明key在此行以下,故有row--;
 * 2)若查找的值key大于当前的值arr[i],则说明key在此列的左边,故有column++;
 * 3)若相等,则返回true
 * 4)判断条件:row >= 0 && column < columns,若满足,继续1),若不满足,则直接返回false
 */
bool query1(int rows, int columns, int key) {
    bool flag = false;
    int column = 0;
    int row = rows - 1;
    int temp = -1;
    while (row >= 0 && column < columns) {
        temp = arr[row * columns + column];
        if (temp == key) {
            flag = true;
            return flag;
        } else if (temp > key) {
            row--;
        } else {
            column++;
        }
    }
    return false;
}
int main() {
    int n, m, t, len;
    bool flag;
    while (~scanf("%d%d%d", &n, &m,&t)) {
        len = n * m;
        for (int i = 0; i < len; i++) {
            scanf("%d", arr + i);
        }
        flag = query1(n, m, t);
        if (flag) {
            printf("Yes\n");
        } else {
            printf("No\n");
        }
    }
    return 0;
}
时间: 2024-11-08 20:28:18

九度 1384 二维数组中的查找的相关文章

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

下决心AC全部剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> 对于面试题,面试官往往更希望我们能提出优化方法,这样更能体现我们的思维能力以及传说中的"内功".所以做剑指offer要着重训练这方面,多总结多细究,总是有优点的.加油~ 题目链接地址: http://ac.jobdu.com/problem.php?pid=1384 二维数组中的查找

剑指OFFER之二维数组中的查找(九度OJ1384)

题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数. 输入的第二行包括一个整数t(1<=t<=1000000):代表要查找的数字. 接下来的m行,每行有n个数,代表题目所给出的m行n列的矩阵(矩阵如题目描述所示,每

剑指Offers 题目1384:二维数组中的查找

题目1384:二维数组中的查找 题解报告:一道典型的二分查找题,用C++做居然超时>1000MS,郁闷半天!,该成C,提交680MS过,C还是很快的! #include <stdio.h> #include <stdlib.h> int a[1010][1010]; int main() { int m, n, t; int flag; while(scanf("%d%d", &m, &n) !=EOF){ scanf("%d&q

[Jobdu] 题目1384:二维数组中的查找

题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数. 输入的第二行包括一个整数t(1<=t<=1000000):代表要查找的数字. 接下来的m行,每行有n个数,代表题目所给出的m行n列的矩阵(矩阵如题目描述所示,每

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

下决心AC所有剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> 对于面试题,面试官往往更希望我们能提出优化方法,这样更能体现我们的思维能力以及传说中的"内功".所以做剑指offer要着重训练这方面,多总结多细究,总是有好处的.加油~ 二维数组中的查找 时间限制:1 秒内存限制:32 兆 特殊判题:否提交:19005解决:3642 题目描述: 在一个

剑指offer系列源码--二维数组中的查找

题目1384:二维数组中的查找 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:14827 解决:2888 题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数. 输入的第二行包括一个整数t(1<=t<=1

题目一:使用Java实现二维数组中的查找

考点:数组 题目:二维数组中的查找 描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 方式一:选择从左下角开始搜寻,因为选择在左下角搜寻的话,如果目标值大于搜索值,那么就向右继续搜索,如果目标值小于搜索值,那么就向上继续搜索.在左上角就无法形成这样的判断.时间复杂度为:0(lgn) package cn.imooc.java2; public class Solution

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

面试题 4. 二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 举例 例如下面的二维数组就是每行.每列都递增排列.如果在这个数组中查找数字7,则返回true;如果查找数字5,由于 数组不含有该数字,则返回false. 1 2 8 9 2 4 9 12 4 7 10 13 6 8 11 15 复杂度:O(M + N) + O(1) 代码实现 public

剑指 offer 第一题: 二维数组中的查找

打算写 图解剑指 offer 66 题 的系列文章,不知道大家有没有兴趣 ?? 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目分析 图 1 如果没有头绪的话,很显然使用 暴力解法 是完全可以解决该问题的. 即遍历二维数组中的每一个元素,时间复杂度:O(n^2). 其实到这里我们就可以发现,使用这种暴力解法并没有充分利用题目给出的信息.这