杨氏矩阵查找

来源:互联网 发布:java中的移位运算 编辑:程序博客网 时间:2024/05/16 11:16

1019. 杨氏矩阵查找

题目描述

杨氏矩阵,即在一个二维数组中,每一行都按照从左到右严格递增的顺序排序,每一列都按照从上到下严格递增的顺序排序。请完成一个函数,输入这样的一个N*N的二维数组和M个整数,判断数组中是否含有上述M个整数。你能解决这个问题吗?

 

输入格式

可能有多个测试输入,第一行给出总共的测试输入的个数。

对于每个测试输入,第一行包含两个正整数NM,接下来是一个N*N的杨氏矩阵,最后是M个待查找的整数(0

输出格式

对于每一个待查找的整数,输出truefalse,即判断矩阵中是否含有该整数。

 

样例输入
1019. <wbr>杨氏矩阵查找 将样例输入复制到剪贴板
5 3 
1 5 10 15 202 7 13 18 243 9 15 21 284 12 20 28 32 5 15 24 30 35153135
样例输出
truefalsetrue


方法一:

#include<iostream>
#include<algorithm>
#include<cstdio>

using namespace std;

bool Search(int N, int key, int **data);

int main() {

    int cases;    //测试用例个数
    scanf("%d", &cases);
    while (cases--) {
        int M, N;    //N:数组的大小,M:待查找数的个数
        scanf("%d%d", &N, &M);
        int **data = new int*[N]; //指向二维数组的指针的指针
        for (int i = 0; i < N; ++i) {
            data[i] = new int[N];
        }
        for (int i = 0; i < N; ++i) {
            for (int j = 0; j < N; ++j) {
                scanf("%d", &data[i][j]);
            }
        }
        int key;
        while (M--) {
            scanf("%d", &key);
            if (Search(N, key, data))
                printf("true\n");
            else
                printf("false\n");
        }
    }
    return 0;
}

bool Search(int N, int key, int **data) {
    int x = 0, y = N - 1;
    bool flag = false;
    while (x < N && y >= 0) {
        if (data[x][y] == key) {
            flag = true;
            break;
        } else if (data[x][y] > key) {
            --y;
        } else
            ++x;
    }
    return flag;
}


方法二:

计数排序

#include<iostream>
#include<cstring>
#include<cstdio>

using namespace std;

int main() {

    int cases;
    scanf("%d", &cases);
    while (cases--) {
        int M, N;
        scanf("%d%d", &N, &M);
        bool data[100000];
        memset(data,0,sizeof(d
ata));
        for (int i = 0; i < N * N; ++i) {
            int temp;
            scanf("%d", &temp);
            data[temp] = 1;
        }
        int key;
        while (M--) {
            scanf("%d", &key);
            if (data[key])
                printf("true\n");
            else
                printf("false\n");
        }
    }
    return 0;
}



0 0
原创粉丝点击