二维数组中的查找

分析:既然已经给定了每一行从左至右递增,那么对于每一行直接二分查找即可,一开始还想着每一列同样查找一次,后来发现每一行查找一遍就能够遍历所有的元素了。

#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <iostream>
#include <algorithm>
#define MaxN 1000
using namespace std;

int N, M, x;
int a[MaxN+5][MaxN+5]; 

bool bisearch(int *base, int delta, int l, int r, int val) {
    int mid, t;
    while (l <= r) {
        mid = (l + r) >> 1;
        t = *(base+delta*mid);
        if (t < val) l = mid + 1;
        else if (t > val) r = mid - 1;
        else return true;
    }
    return false;
}

int main() {
    bool exsit;
    while (scanf("%d %d", &N, &M) != EOF) {
        scanf("%d", &x);
        exsit = false;
        for (int i = 0; i < N; ++i) {
            for (int j = 0; j < M; ++j) {
                scanf("%d", &a[i][j]);
            }
        }
        for (int i = 0; i < N && !exsit; ++i) {
            exsit = bisearch((int *)(a+i), 1, 0, M-1, x);
        }
        puts(exsit ? "Yes" : "No");
    }
    return 0;
}
View Code

相关文章:

  • 2021-06-10
  • 2021-09-15
  • 2021-04-23
  • 2021-09-13
  • 2021-07-10
  • 2021-10-16
  • 2021-06-04
猜你喜欢
  • 2021-11-14
  • 2021-11-19
  • 2021-11-20
  • 2018-03-06
  • 2021-10-16
  • 2021-10-14
  • 2022-01-15
相关资源
相似解决方案