首页 > 编程语言 > 详细

面试题03_二维数组中查找_剑指offer系列

时间:2015-07-17 16:15:09      阅读:298      评论:0      收藏:0      [点我收藏+]

题目描述:

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


解题思路:

这是一道考查二维数组的理解和编程能力的题。

在二维数组在内存中是连续存储的。在内存中从上到下存储各行元素,在同一行中按照从左到右存储。

因此可以按照行号和列号来计算出相对数组首部的位置。


由于每一行 和 每一列都是有序的,因此,我们可以拿要查找的数与数组的右上角的数进行比较。

因为每一行从左到右递增,每一列从上到下递增。
所以查找一个数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>




版权声明:本文为博主原创文章,未经博主允许不得转载。

面试题03_二维数组中查找_剑指offer系列

原文:http://blog.csdn.net/tommyzht/article/details/46927293

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!