JianzhiオファーシリーズJianzhiオファー04:2次元配列で検索

タイトル説明:

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;

  1. 比較するデータがその位置のデータよりも大きい場合は、次の行、つまりi ++に進みます。
  2. 比較されたデータがより小さい場合、列は右に移動します。つまり、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;
    }
};

 

 

おすすめ

転載: blog.csdn.net/qq_46423166/article/details/110915036