什么是杨氏矩阵?
如果矩阵每一行从左到右是递增的,每一列从上到下也是递增的,这样的矩阵就是杨氏矩阵。如下图所示:
题目:
有一个二维数组. 数组的每行从左到右是递增的,每列从上到下是递增的. 在这样的数组中查找一个数字是否存在。
思绪
- 由于杨氏矩阵从左到右、从上到下都是逐渐递增的,假如找13这个数,我们先从图的右上角开始
- 每次将搜索值与右上角的值比较,如果大于右上角的值,则直接去除1行,否则,则去掉1列。
- 最差的情况就是从图的右上角一直查到左下角。
代码如下:
#include<stdio.h>
#include<stdlib.h>
int findNum(int a[5][5], int x, int y, int key){
int row = 0, col = y - 1;
while (col >= 0 && row < x){
if (a[row][col] < key){
row++;
}
else if(a[row][col] > key){
col--;
}
else{
return 1;
}
}
return 0;
}
int main(){
int a[5][5] = { { 1, 4, 7, 11, 15 },
{ 2, 5, 8, 12, 19 },
{ 3, 6, 9, 16, 22 },
{ 10, 13, 14, 17, 24 },
{ 18, 21, 23, 26, 30 } };
if (findNum(a, 5, 5, 13)){
printf("It has been found!\n");
}
else{
printf("It hasn't been found!\n");
}
system("pause");
return 0;
}
代码生成图: