タイトル説明:
n * mの2次元配列では、各行は左から右に昇順で並べ替えられ、各列は上から下に昇順で並べ替えられます。効率的な関数を完成させてください。このような2次元配列と整数を入力して、配列に整数が含まれているかどうかを判別してください。
例:
既存のマトリックスは次のとおりです:
[
[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を返します。
問題解決のアイデア:
まず、配列全体を観察してルールを見つけることができます。次に、自分の理解に従って、次のことができます。
最適な開始位置は最初の行の右端です。この位置は比較を開始するため、結果
として、2つの値の最初の定義は2つだけになります。behavior:i = 0; column:j = matrix [0] .size( )-1;
- 比較するデータがその位置のデータよりも大きい場合は、次の行、つまりi ++に進みます。
- 比較されたデータがより小さい場合、列は右に移動します。つまり、j--;
コード:
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if(matrix.size() == 0) return false;
int i=0;
int j=matrix[0].size()-1;
while(j>=0 && i<matrix.size())
{
if(matrix[i][j]>target)
{
j--;
}
else if(matrix[i][j]<target)
{
i++;
}
else
{
return true;
}
}
return false;
}
};