vector建立二维数组的编程试验biu~

先上主角,无意刷到了剑指offer的一道题,是在矩阵中寻找某个数字,上代码。

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

/*
	剑指offer在数组中寻找某个数字
	二维数组从左到右是递增的,从上到下是递增的,在此矩阵中寻找某个特定的数字
*/

bool Find(int num, vector<vector<int> > array) {
	int row = array.size();
	int col = array[0].size();
	bool found = false;
	int i, j;
	for (i = col - 1, j = 0; i >= 0 && j < row;) {
		if (num < array[j][i]) {
			--i;
			continue;
		}
		else if (num > array[j][i]) {
			++j;
			continue;
		}
		else {
			found = true;
			break;
		}
	}
	return found;
}
int main()
{
	vector<vector<int> > array(4, vector<int>(4));
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4; j++) {
			cin >> array[i][j];
		}
	}
	int num;
	cin >> num;
	cout << Find(num, array) << endl;
	return 0;
}

上面的程序中细心的可能会发现有break,如果去掉break的话,VS2017我是运行不出结果的,然而下面这位博主的代码:
 

https://blog.csdn.net/cnd2449294059/article/details/77257053

/*
矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,
因此从左下角开始查找,当要查找数字比左下角数字大时。右移
要查找数字比左下角数字小时,上移
*/

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

class Solution {
public:
	bool Find(int target, vector<vector<int> >array) {
		int row = array.size();
		int col = array[0].size();
		int i, j;
		for (i = row - 1, j = 0; i >= 0 && j < col;)
		{
			if (target < array[i][j])
			{
				i--;
			}
			else if (target > array[i][j])
			{
				j++;
			}
			else
				return true;
		}

		return false;

	}
};

int main()
{
	vector<vector<int> > array(4, vector<int>(4));
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 4; j++) {
			cin >> array[i][j];
		}
	}
	Solution s;
	cout << s.Find(9, array);
	return 0;
}

我稍微改了改数据的输入形式嘻嘻,然后你会发现是没有break的,但是依然能输出结果,不会出现运行卡死的现象,我还挺纳闷,难道是类的成员函数比普通的函数执行效率高吗??用了class居然不用break也能执行出正确结果,查了些资料,结果很少有解答的,所以我现在只能认为类是效率更高的。

 

有朋友知道具体的原因的话,还望交流一下,谢谢你的留言啦!

懂了vector建立二维数组的方式也是很高兴呐。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值