先上主角,无意刷到了剑指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建立二维数组的方式也是很高兴呐。