行递增、列递增的二维数组中查找



每一行递增,每一列递增的矩阵的查找:


一个m*n的矩阵,从左到右从上到下都是递增的,给一个数elem,求是否在矩阵中,给出思路和代码

  杨氏矩阵,简单题目:

  #include

  #include

  /**

  * 有序矩阵查找

  *

  * T = O(n + m)

  *

  */

  void findKey(int **matrix, int n, int m, int key)

  {

  int row, col;

  for (row = 0, col = m - 1; row < n && col >= 0;) {

       /*

           对于某一行而言,从后往前找;

          整体初始位置为,第一行的最后一列;

         即初始是左上角,然后不断和要查找的值进行比较,看是往下,还是往左移动;

      */

  if (matrix[row][col] == key) {

  printf("第%d行,第%d列\n", row + 1, col + 1);

  break;

  } else if (matrix[row][col] > key) {

  col -= 1;

  } else {

  row += 1;

  }

  }

  printf("不存在!\n");

  }

  int main(void)

  {

  int i, j, key, n, m, **matrix;

  // 构造矩阵

  scanf("%d %d", &n, &m);

  matrix = (int **)malloc(sizeof(int *) * n);

  for (i = 0; i < n; i ++)

  matrix[i] = (int *)malloc(sizeof(int) * m);

  for (i = 0; i < n; i ++) {

  for (j = 0; j < m; j ++)

  scanf("%d", &matrix[i][j]);

  }

  // 查询数据

  while (scanf("%d", &key) != EOF) {

  findKey(matrix, n, m, key);

  }

  return 0;

  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值