bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
/*
基本思路: 首先与主对角线上的元素比较,确定大致所在的行和列即可。
*/
int n = matrix.size(); // 行的大小
int m = matrix[0].size(); //列的大小
int i = n < m ? n - 1 : m - 1;
int num;
bool flag = false;
while (i >= 1) {
if (target <= matrix[i][i] && target >= matrix[i - 1][i - 1]) {
num = i;
flag = true;
break;
}
}
if (flag) {
for (int j = 0; j <= i; j++) {
if (target == matrix[num][j]) {
return true;
}
}
for (int j = 0; j <= i; j++) {
if (target == matrix[j][num]){
return true;
}
}
} else {
if (n == m) {
return false;
} else if (n > m) {
for (int j = m - 1; j < n; j++) {
for (int k = 0; k < m; k++) {
if (target == matrix[j][k]){
return true;
}
}
}
} else if (m > n) {
for (int j = 0; j < n; j++) {
for (int k = n - 1; k < m; k++) {
if (target == matrix[j][k]){
return true;
}
}
}
}
}
return false;
}
但是超时了,QAQ 。
//每一行进行二分还是超时.
bool BinarySearch (vector <int> &rets, int m) {
int s = 0;
int e = rets.size();
while (s <= e) {
int mid = (s + e) / 2;
if (m > rets[mid]) {
s = mid;
} else if (m < rets[mid]) {
e = mid;
} else {
return true;
}
}
return false;
}
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
for (int i = 0; i < matrix.size(); i ++) {
if (BinarySearch(matrix[i], target)) {
return true;
break;
}
}
return false;
}
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
for(int i = 0 ; i < matrix.size() ; i ++){
for(int j = 0 ; j < matrix[0].size() ; j ++){
if(matrix[i][j] == target){
return true;
}
}
}
return false;
}
//不是吧,一个一个遍历就过了????
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
// for(int i = 0 ; i < matrix.size() ; i ++){
// for(int j = 0 ; j < matrix[0].size() ; j ++){
// if(matrix[i][j] == target){
// return true;
// }
// }
// }
if (matrix.size() == 0) {
return false;
}
int m = matrix.size();
int n = matrix[0].size();
int row = 0, col = n - 1;
while(row < m && col >= 0){
if (target < matrix[row][col]) {
col --;
} else if (target > matrix[row][col]) {
row ++;
} else {
return true;
}
}
return false;
}