现在的位置: 首页 > 综合 > 正文

CI9.6-在特殊的矩阵中找给定的数

2019年03月07日 ⁄ 综合 ⁄ 共 639字 ⁄ 字号 评论关闭

给定一个整数的二维数组,其中每行从左到右升序,每列从上到下递增。实现一个方法返回给定数在数组中的下标。

思路:

可以顺序查找,但是这样就没有利用升序的条件。因为行列都是有序的,所以通过一次比较尽可能排除一行或一列。如果从数组左上角开始比较,若给定数大于左上角的数,那么无法确定剔除这一行还是这一列。如果从数组右上角比较,若给定数较大,则可以剔除这一行,若给定数较小,则可以剔除这一列。当然也可以从左下角的数开始比较,不能从右下角开始比较。

#include <iostream>
#include <vector>
using namespace std;

int Find(const vector<int>& ivec, int row, int column, int num)
{
	if (ivec.size() == 0)
		return -1;
	int i = 0, j = column -1;
	while (i < row && j >= 0)
	{
		int index = i * column + j;
		if (ivec[index] == num)
			return index;
		else if (ivec[index] < num)
			++i;
		else
			--j;
	}
	return -1;
}

int main()
{
	int r, c;
	vector<int> ivec;
	while (cin >> r)
	{
		cin >> c;
		int n;
		for (int i = 0; i < r * c; ++i)
		{
			cin >> n;
			ivec.push_back(n);
		}
		cin >> n;
		cout << Find(ivec, r, c, n) << endl;
	}
	return 0;
}

抱歉!评论已关闭.