作者简介:一名大一在校生
个人主页:月亮嚼成星~
个人WeChat:yx1552029968
系列专栏:c语言刷题总结
每日一句:当暴雨在头顶倾泻时,你只当它是屋檐滴水。
杨氏矩阵
题目:
有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的。
请编写程序在这样的矩阵中查找某个数字是否存在。
要求:时间复杂度小于O(N);
思路:
第一:首先按题目创建一个每行从左到右递增,从上到下是递增的矩阵。
第二:因为时间复杂度小于O(N),所以不能用两个for循环嵌套。要用一个循环。
第三:我们可以从第0行的最后一位元素开始找, 将要查找值与它比较;
第四:查找值大我们就去下一行找(i++),因为这个值已经是本行最大值了;
第五:查找值小我们就往这行前面找(j - -),因为当前值是本行最大值。找到返回1,未找到返回0.
//杨氏矩阵
//从左到右递增
//从上到下递增
#include<stdio.h>
int find(int arr[3][3], int row, int col, int key)
{
int i = 0;//从第0行
int j = col - 1;//每一行中最后一个元素,也是最大的元素
while (i < row && j >= 0)//条件小于第row行,大于等于第0位
{
if (key > arr[i][j])
i++;//下一行
else if (key < arr[i][j])
j--;//往前找
else
return 1;
}
return 0;
}
int main()
{
int arr[3][3] =
{ {1,2,3},
{4,5,6},
{7,8,8}
};
int ret = find(arr, 3, 3, 7);//用ret来接受函数的返回值
if (ret == 1)//判断结果
{
printf("find it");
}
else
{
printf("not find");
}
return 0;
}
如上就是本篇的所有知识,如果大家喜欢看此文章并且有收获,可以支持下博主,给博主三连加关注,你的关注是对我最大的鼓励,也是我的创作动力~!
再次感谢大家观看,感谢大家支持!