杨氏矩阵
有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。
要求:时间复杂度小于O(N);
#include<stdio.h> void find_k(int a[3][3], int k, int x, int y) { //根据矩阵递增的特点,从右上角开始时间复杂度会相对较小; int n= 0; int m = y - 1; //横坐标不能大于3,纵坐标要大于等于0; while (n < x && m >= 0) { //如果较小,横坐标加 if (a[n][m] < k) { n++; } //如果较大,减纵坐标 else if (a[n][m] > k) { m--; } else { printf("找到了下标是:%d %d", n, m); return; } } printf("找不到\n"); } int main() { int k = 17; int a[3][3] = { 1,2,3,4,5,6,7,8,9 }; find_k(a,k,3,3); return 0; }