杨氏矩阵
有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。
要求:时间复杂度小于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;
}