二维数组中的查找概述

这一题给跪,c++死活超时。。。后来main函数改成用c就好了。。。

算法:

/*
题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
输入:
输入可能包含多个测试样例,对于每个测试案例,
输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数。
输入的第二行包括一个整数t(1<=t<=1000000):代表要查找的数字。
返回栏目页:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/
接下来的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
-------------------------------------------------
原理:
每次选取数组右上角的数字进行比较,若该数字比待查找数字大,那么删掉这一列;如果该数字比待查找数字小,那么删除这一行;这样一来,每次都可以使二维数组减少一行或一列,最终可以查找到该元素。
*/
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
#define MAX 1000000
bool Find(int arr[],int row,int column,int target)
{
    int r,c;
    if(arr==NULL || row<1 || column<1)
    {
        return false;
    }
    r = 0,c = column-1;
    while(r<=row-1 && c>=0)
    {
        if(target == arr[r*column+c])
        {
            return true;
        }else if(target > arr[r*column+c])
        {
            r++;
        }else
        {
            c--;
        }
    }
    return false;
}
int main()
{
    int m,n;
    while(scanf("%d %d",&m,&n) != EOF)
    {
        int key,i;
        static int matrix[MAX] = {0};
        scanf("%d",&key);
        for(i=0;i<m*n;i++)
            scanf("%d",matrix+i);
        bool result = Find(matrix,m,n,key);
        if(result)
            printf("Yes\n");
        else
            printf("No\n");
    }
    return 0;
}

作者:csdn博客 RowandJJ

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, 函数
, 二维数组
, c++ 二维数组
, 输入
, 整数
, 一个
, 二维
二维数组查找
php二维数组查找键值、php 二维数组查找、二维数组中的查找、二维有序数组查找数字、二维数组查找,以便于您获取更多的相关知识。

时间: 2024-09-29 09:41:34

二维数组中的查找概述的相关文章

[剑指Offer]5.二维数组中的查找

题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路 [算法系列之三十三]杨氏矩阵 代码 /*--------------------------------------- * 日期:2015-07-19 * 作者:SJF0115 * 题目: 5.二维数组中的查找 * 网址:http://www.nowcoder.com/books/coding-interviews/a

【17】二维数组中的查找

题目:在一个二维数组中,每一行都按照从从左到右递增的顺序排序,每一列按照从上到下的顺序递增排序.输入一个这样的二维数组arrNum和一个整数value,判断二维数组是否含有该整数 方案一:最朴素的方法枚举整个数组,时间复杂度O(n^2),效率太低 方案二:观察这个数组的特点就是每行每列都是递增的顺序.               例如二维数组如下,value值为7                1  2  8  9                2  4  9 12              

二维数组中的查找

题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 解题思路 从右上角元素开始遍历,若小于目标,则删除整行:若大于目标,则删除整列.每次执行都会删除一行或一列,最多执行2n次. 实现代码 class Solution { public: bool Find(vector<vector<int> > array,int target) { int rend =

剑指offer系列之三:在二维数组中查找元素

题目描述: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 由于题目条件的成立,所以使得这道题可以使用对角线的方法完成,可以从右上角的元素考虑,如果目标查找元素小于右上角的元素,那么不可能在右上角元素所在的列,如果目标大于剩余列的右上角的元素,那么不可能在该右上角元素所在的行.依照这个规律,就可以完成目标元素的查找(参考剑指offer书中的思路).基于此,我写出如下的代码(已被

c-如何定义一个自增之后在二维数组中移动到下一行的指针?

问题描述 如何定义一个自增之后在二维数组中移动到下一行的指针? 如何定义一个自增之后在二维数组中移动到下一行的指针?如何定义一个自增之后在二维数组中移动到下一行的指针? 解决方案 自增是不能移动到下一行的,自增实现的是++, 解决方案二: 用二重数组,比如 int ** arr; arr += 第一维长度; 解决方案三: int a[m][n]={""}; *a+1;表示下一行; *(a+1):表示下一个元素位置. 若果now<n,移动到x行的当前位置:a[m*x+now]. 解

c++读取txt文件里的数据,然后保存在二维数组中进行处理

问题描述 c++读取txt文件里的数据,然后保存在二维数组中进行处理 我写的程序是把数据自己输入在主函数里,但是如果想实际的应用应该是有一个数据文件,然后提取出数据文件的数据保存在二维数组中才对,而且这个二维数组要根据具体文件的大小定数组的行列数,有谁能帮我做一下吗,谢谢! #include #include #include using namespace std; #define M 10//二维数组的行 #define N 6//二维数组的列 class Data { double a[M

剑指offer 面试题3—二维数组中找数

题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 基本思想: 首先选取数组中右上角的数字.如果等于要找的数字,结束.如果大于要找的数字,剔除这个数字所在的列:如果小于要找的数字,剔除这个数字所在的行. public static boolean find(int[][] array, int number) { if (array == null || array.len

二维数组与指针-C语言二维数组中的*(p+1)的确切含义

问题描述 C语言二维数组中的*(p+1)的确切含义 各位大师们,烦请指教一二吧.如果是在一维数组中,*(p+1)表示p+1这个地址空间或空间中的值,那么在二维数组中,p+1是指向a[1]*(p+1)是a1这个地址中的值啊?可是为什么会是地址呢? 解决方案 二维数组其实是一个小戏法,本质上还是一维数组--二维下标连续构成的数组又连续构成第一维下标.你可以像遍历一维数组那样遍历它 解决方案二: 其实a[2][3]的调用可以看成是两个调用,首先是对a进行[2]操作,然后再对a[2]的返回值进行[3]操

JS中取二维数组中最大值的方法汇总_javascript技巧

在JavaScript中可以通过内置的 Math.max() 的最大值,但是要从多重数组中取出最大值,还是有一定的难度. 问题描述 假设你有一个数组,而且这个数组中包含了数字的子数组,而我们要做的是从数组中的每个子数组中返回其最大的那个最大数. 基本解决方案 function largestOfFour(arr) { var results = []; // 创建一个results变量来存储 // 创建一个外层循环,遍历外层数组 for (var n = 0; n < arr.length; n