1暴力解法,直接遍历找值
2如果数组从右上角出发,则往下转或往左转,,如果数组从左下角出发,则往右转或往上转
#include <iostream>
#include <vector>
using namespace std;
class Solution
{
public:
//暴力,遍历
bool Find(vector<vector<int> > array, int target) {
int row = 0, col = 0;
bool isFoud = false;
for(int i = 0; i < array.size(); ++i) {
for (int j = 0;j < array[i].size(); ++j) {
if (false == isFoud && target == array[i][j]) {
isFoud = true; //找到了就停止
}
}
}
return isFoud;
}
//右上角出发
bool Findd(vector<vector<int> > array, int target){
int row = array.size(),rol = array[0].size();
bool ret = false;
int cool = rol-1;
for (int i = 0, j =cool;(i >= 0 && i < row) && (j >= 0 && j < rol);) {
if (target == array[i][j]) {
ret = true;
break;
}
else if(target < array[i][j]) {
cout << "turn left" << endl;
j--;//target小就往左转
}
else{
cout << "turn down" << endl;
i++;//target大就往下转
}
}
return ret;
}
//左下角出发
bool Finddd(vector<vector<int> > array,int target) {
int row = array.size(),rol = array[0].size();
bool ret = false;
int cool = row-1;
for (int i = cool, j = 0; (i >= 0 && i < row) && ( j >= 0&& j <rol);){
if (target == array[i][j]){
ret = true;
break;
}
else if ( target < array[i][j]) {
cout << "turn up" << endl;
i--;//target小就往上转
}
else{
cout << "turn right" << endl;
j++;//target大就往右转
}
}
return ret;
}
};
int main()
{
int a1[]={ 1, 2, 8, 9,};
vector<int> vec(a1, a1+4);
for(int i = 0; i < 4; i++)
{
cout << vec[i] <<" ";//输出
}
cout <<endl;
int a2[]={ 2, 4, 9, 12,};
int a3[]={ 4, 7, 10, 13,};
int a4[]={ 6, 8, 11, 15,};
vector<vector<int> > array;
array.push_back(vector<int>(a1, a1+4));
array.push_back(vector<int>(a2, a2+4));
array.push_back(vector<int>(a3, a3+4));
array.push_back(vector<int>(a4, a4+4));//产生二维数组
Solution solu;
cout << solu.Find(array,7) << endl;
//cout << solu.Findd(array,7) << endl;
//cout << solu.Finddd(array,9) << endl;
//cin.get();
//cin.get();
return 0;
}