タイトル
N×M個の二次元アレイでは、各列から昇順に上から下へ、各列をソートするソート昇順の順に左から右へ。完全な機能は、そのような二次元アレイと整数を入力し、配列の整数が含まれているか否かが判断されます。
例:
次のように既存の行列が掛け:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
ターゲット= 5考えると、trueを返します。
与えられたターゲット= 20は、falseを返します。
制限事項:
0 <= n <= 1000
0 <= m <= 1000
思考
[LeetCode 2次元マトリクスII] 240検索
対象に等しくない場合特徴のアレイによれば、あなたが左下または要素の右上から見始めることができ、直接の行を減らすか、または見つけることができます。
コード
時間計算量:O(N + M)
の複雑容量:O(1)
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if (matrix.empty()) return false;
int row = matrix.size(), col = matrix[0].size();
int i = row - 1, j = 0;
while (i >= 0 && j < col) {
if (target == matrix[i][j]) return true;
else if (target < matrix[i][j]) --i;
else ++j;
}
return false;
}
};
もう一つの方法
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if (matrix.empty()) return false;
int row = matrix.size(), col = matrix[0].size();
int i = 0, j = col - 1;
while (i < row && j >= 0) {
if (target == matrix[i][j]) return true;
else if (target < matrix[i][j]) --j;
else ++i;
}
return false;
}
};