题目:
输入是一个N*N的数字矩阵并且已读入内存,每一行均从左到右递增,每一列从上到下递增,给出一个算法决定数m是否在该矩阵中
解析:从矩阵的右上角的元素开始,若m小于此元素,则向左移动到下一个元素,若m大于此元素,则向下移动,直到寻找到此元素。
#include <iostream>
#include <vector>
using namespace std;
template<typename T, typename F>
int searchWord(T arr,F aim)
{
bool find = false;
size_t row = 0;
size_t column = arr.size() - 1;
while (!find) {
if ((row > arr.size() - 1) || (column < 0))
return false;
if (aim > arr[row][column]) {
row++;
}
else if (aim < arr[row][column]) {
column--;
}
else {
find = true;
}
}
// cout << "location: arr[" << row << "][" << column << "]" << endl;
return find;
}
int main()
{
vector<vector<int>> vec = { {1,2,3,4,5,6},
{2,3,4,5,6,7},
{3,4,5,6,7,8},
{4,5,6,7,8,9},
{5,6,7,8,9,10},
{6,7,8,9,10,11}
};
cout << vec.size() << " "<<vec[0].size()<< endl;
cout << "find K true or false : " << searchWord(vec,10) << endl;
}