練習題--數組(使用vector)

在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。

思路:依照此數組的特點,可以用i, j分別表示行和列,為了效率更高,把i的初始值設為0,j的初始值設為array[0].size() - 1(即第一個與target比較的數為第0行的最后一個元素),這樣可以保證target比當前位置的數大,而恰好target值與同一行的某個數相等時,不會跳到下一行去,而是從右往左遍歷比較。
【即行i未確定時,每次與target比較的總是每一行的最大數,當target小于當前數時,說明與target相等的數就在該行(此時i不需再加1,j開始逐漸減1)】

#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
    bool Find(int target, vector<vector<int> > array) {
        for (int i = 0, j = array[0].size() - 1; i < array.size() && j >= 0; ) {
            if (target == array[i][j]) {
                return true;
            }

            if (target > array[i][j]) {
                i++;
            } else {
                j--;
            }
        }

        return false;
    }
};

int main() {
    int m, n;
    cin >> m >> n;
    vector<vector <int> > vec(m, vector<int>(n, 0));

    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            cin >> vec[i][j];
        }
    }

    int target;
    cin >> target;
    
    Solution solution;
    if (solution.Find(target, vec)) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }

    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容