博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer(一):二维数组中的查找
阅读量:6720 次
发布时间:2019-06-25

本文共 1328 字,大约阅读时间需要 4 分钟。

说明:

  1.本系列是根据《》这个系列做的一个小笔记。

  2.直接动力是因为师兄师姐找工作很难,而且机械出生的我面试算法更难。

  3.刚开始准备刷LeetCode、LintCode,突然看见一个,同为研究僧为啥差别那么大呢?

  4.在别人基础之上进行部分优化,总结自己的观点。

 


问题:

  在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路:

  1.普通想法:行列循环,依次寻找。

  2.升级思想:以行和列为单位,以一行或者一列的最大一个数去和目标对比(等于目标直接结束、小于目标向下一行或列的最大值进行对比、大于目标值以此行或者列为目标进行查找),这些循环都是迭代的,当然也可以用循环。

  3.终极思想:以第二个思想为基础,搜索目标改为二分法,这种方法平均效率很高。

  4.~~能力有限欢迎补充!

C++代码实现:(本文以第二个为例子)

1 #include
2 using namespace std; 3 bool FindNum(int* num, int aim); 4 5 int main() 6 { 7 cout << "The first code Answer is : "; 8 int a[5][5] = { {
1,2,3,4,5},{
2,3,4,5,6 }, {
11, 12, 13, 14, 15},{
21, 22, 23, 24, 25},{
31, 32, 33, 34, 35} }; 9 cout << FindNum(a[0],7) << endl;10 while (1);11 return 0;12 }13 14 //@num:二维数组15 //@aim:目标数16 //@存在返回True,不存在返回False17 bool FindNum(int* num, int aim)18 {19 if (num == NULL) return false;20 int rows = sizeof(num) / sizeof(num[0]);21 int cols = sizeof(num[0]);22 for (int i = cols - 1; i >= 0; i--)23 {24 if (*(num + 0*cols +i) == aim) return true;//相等退出25 else if (*(num + 0 * cols + i)>aim) continue;//大于删除列26 else//小于查找列27 {28 for (int j = 0; j

 

 

 

参考:,直接跟着这位大神博客刷题的,部分思路参考大神。

 

转载于:https://www.cnblogs.com/wjy-lulu/p/8064310.html

你可能感兴趣的文章
组合与继承之定义final成员
查看>>
IPMI总结
查看>>
[Hadoop] 2.2 开发环境 STS3.4
查看>>
织梦开启调试模式
查看>>
【Visual C++】游戏开发笔记十五 游戏人工智能(一) 运动型游戏AI
查看>>
全面解析Java注解
查看>>
批量将Access 2000 的mdb文件导入到SqlServer 2005中
查看>>
基础指令的使用篇3 Linux版
查看>>
Event ID: 36888 error state is 1203 胡杨的博客
查看>>
关照一下IE6这个垃圾png图片背景不透明的bug
查看>>
btrfs文件系统
查看>>
找出Win7 C盘空间被占用的罪魁祸首
查看>>
CCNA之网络互连
查看>>
spring读取.properties文件
查看>>
Android学习 之 Activity和Window之间的关系
查看>>
bash版2048
查看>>
find命令详解(一)
查看>>
firefox下调试wap网页的方法
查看>>
java.lang.Object
查看>>
c++判断和跳转语句
查看>>