面试题03_二维数组中查找_剑指offer系列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了面试题03_二维数组中查找_剑指offer系列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1104字,纯文字阅读大概需要2分钟。
内容图文
![面试题03_二维数组中查找_剑指offer系列](/upload/InfoBanner/zyjiaocheng/1142/86e72d7586ba4572aac6f9ab5b1f641f.jpg)
题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:
这是一道考查二维数组的理解和编程能力的题。
在二维数组在内存中是连续存储的。在内存中从上到下存储各行元素,在同一行中按照从左到右存储。
因此可以按照行号和列号来计算出相对数组首部的位置。
由于每一行 和 每一列都是有序的,因此,我们可以拿要查找的数与数组的右上角的数进行比较。
因为每一行从左到右递增,每一列从上到下递增。
所以查找一个数num,可以这样做:
首先拿num与右上角的数进行比较。
若相等,则直接返回,找到该数。
若num < 右上角数,则剔除右上角数所在列 col--
若num > 右上角数,则剔除右上角数所在行 row++
有了这个思路,我们就可以进行写代码了。
其实,还可以选择与左下角的数进行比较。方法与上述跟右上角数比较一样。
代码实现:
<span style="font-size:18px;">class Solution { public: bool Find(vector<vector<int> > array, int target) { bool ans = false; int Row_len = array.size();//获取行数 int Col_len = array[0].size();//获取列数 if (!array.empty() && Row_len > 0 && Col_len >0) { int row = 0;//下标从零开始 int col = Col_len - 1;//同样下标从零开始 while (row < Row_len && col>= 0) //这里注意 col >= 0,不要漏掉=号 { if (array[row][col] == target) { ans = true; break; } else if (array[row][col] > target) --col; else ++row; } } return ans; } };</span>
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/tommyzht/article/details/46927293
内容总结
以上是互联网集市为您收集整理的面试题03_二维数组中查找_剑指offer系列全部内容,希望文章能够帮你解决面试题03_二维数组中查找_剑指offer系列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。