德阳市建设局官方网站安全月,给公司网站做seo的好处,e站注册网站,seo网站推广的主要目的不包括【C语言每日一题】——倒置字符串#x1f60e;前言#x1f64c;杨氏矩阵#x1f64c;总结撒花#x1f49e;#x1f60e;博客昵称#xff1a;博客小梦 #x1f60a;最喜欢的座右铭#xff1a;全神贯注的上吧#xff01;#xff01;#xff01; #x1f60a;作者简介…
【C语言每日一题】——倒置字符串前言杨氏矩阵总结撒花博客昵称博客小梦 最喜欢的座右铭全神贯注的上吧 作者简介一名热爱C/C算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主 博主小留言哈喽各位CSDN的uu们我是你的博客好友小梦希望我的文章可以给您带来一定的帮助话不多说文章推上欢迎大家在评论区唠嗑指正觉得好的话别忘了一键三连哦 前言 哈喽各位友友们我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下我仅已此文和大家分享C语言每日一题】——杨氏矩阵~这里利用了数组指针的方法知识 都是精华内容可不要错过哟 杨氏矩阵
题目简述 有一个数字矩阵矩阵的每行从左到右是递增的矩阵从上到下是递增的请编写程序在这样的矩阵中查找某个数字是否存在。 要求 时间复杂度小于O(N);
解题思路分析 这里要求 时间复杂度小于O(N);所以利用常规的遍历一遍数组的方法是不满足的。因为遍历数组的时间复杂度是O(N)。首先认真读题分析解题思路。因为矩阵的每行从左到右是递增的矩阵从上到下是递增的所以第一行的最后一个元素就是这一行的最大值也是这个元素所在列的最小值。每一行的最后一个元素都是该行的最大值。第一步就是拿第一行的最后一个元素与我们查找的元素进行大小比较。如果比我们的 k 要大在我说明该元素一定在该行上或者不存在 。让 j - - ,对该行逐个逐个进行两两比较 。 如果比我们的 k 要小在我说明该元素一定在下一行上或者不存在 。让 i ,对该列逐个逐个进行两两比较 。然后循环重复上述操作直到找到元素后再跳出循环。-这里定义一个flag 变量目的是为了将没有找到元素的信息打印出来这也是题目的要求之一**按照这种方法时间复杂度是小于O(N)。 画图分析
解题源码分享
#includestdio.hvoid Find(int(*a)[3], int row, int col,int k)
{int i 0;int flag 0;int j col - 1;while ((i 0 i row - 1) (j 0 j col - 1) ){if (*(*(a i) j) k){j--;}else if(*(*(a i) j) k){i;}else{flag 1;printf(找到了元素其下标为%d ,%d\n, i, j);break;}}if(flag 0)printf(找不到该元素\n);
}int main()
{int a[3][3] { {1,2,3},{4,5,6}, {7,8,9} };int row sizeof(a[0]) / sizeof(int);int col sizeof(a) / sizeof(a[0]);int k 0;scanf(%d, k);Find(a,row,col,k);return 0;
}程序输出结果验证
总结撒花 本篇文章旨在分享C语言详解C语言每日一题】——杨氏矩阵。希望大家通过阅读此文有所收获如果我写的有什么不好之处请在文章下方给出你宝贵的意见。如果觉得我写的好的话请点个赞赞和关注哦~