练习题--数组(使用vector)
2017-02-05 本文已影响19人
szu_bee
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:依照此数组的特点,可以用i, j分别表示行和列,为了效率更高,把i的初始值设为0,j的初始值设为array[0].size() - 1(即第一个与target比较的数为第0行的最后一个元素),这样可以保证target比当前位置的数大,而恰好target值与同一行的某个数相等时,不会跳到下一行去,而是从右往左遍历比较。
【即行i未确定时,每次与target比较的总是每一行的最大数,当target小于当前数时,说明与target相等的数就在该行(此时i不需再加1,j开始逐渐减1)】
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
for (int i = 0, j = array[0].size() - 1; i < array.size() && j >= 0; ) {
if (target == array[i][j]) {
return true;
}
if (target > array[i][j]) {
i++;
} else {
j--;
}
}
return false;
}
};
int main() {
int m, n;
cin >> m >> n;
vector<vector <int> > vec(m, vector<int>(n, 0));
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
cin >> vec[i][j];
}
}
int target;
cin >> target;
Solution solution;
if (solution.Find(target, vec)) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}