//杨氏矩阵
如:
1 2 3
2 3 4
3 4 5
有一个二维数组.
数组的每行从左到右是递增的,每列从上到下是递增的.
在这样的数组中查找一个数字是否存在。
时间复杂度小于O(N);
思路:
因行列的元素都是按照升序排列的,所以在找数字时只需在行列之前加上判断条件即可缩短时间复杂度,若此数小于每行或每列的第一个数则直接跳出这一行或这一列,然后进入下一行或列,直到找到该数
//杨氏矩阵找数字
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define row 3
#define col 3
int yang_matrix(int a[3][3]) {
int number = 0;
int i = 0, j = 0;
printf("请输入一个整数:\n");
scanf("%d", &number);
for (i; i < row; i++) {
if (number < a[i][j]) {
continue;
}
if (number == a[i][j]) {
return a[i][j];
}
for (j; j < col; j++) {
if (number < a[i][j]) {
continue;
}
if (number == a[i][j]) {
return a[i][j];
}
}
j = 0;
}
return 0;
}
int main() {
int arr[3][3] = { {1,3,5},{4,7,8},{9,10,11} };
int number1=yang_matrix(arr);
if (number1 == 0) {
printf("不包含\n");
}else {
printf("包含\n");
}
system("pause");
return 0;
}