1. 程式人生 > 其它 >VTK學習記錄1-簡單demo

VTK學習記錄1-簡單demo

由於給定的二維陣列具備每行從左到右遞增以及每列從上到下遞增的特點,當訪問到一個元素時,可以排除陣列中的部分元素。

從二維陣列的右上角開始查詢。如果當前元素等於目標值,則返回 true。如果當前元素大於目標值,則移到左邊一列。如果當前元素小於目標值,則移到下邊一行。

可以證明這種方法不會錯過目標值。如果當前元素大於目標值,說明當前元素的下邊的所有元素都一定大於目標值,因此往下查詢不可能找到目標值,往左查詢可能找到目標值。

如果當前元素小於目標值,說明當前元素的左邊的所有元素都一定小於目標值,因此往左查詢不可能找到目標值,往下查詢可能找到目標值。

  • 若陣列為空,返回 false
  • 初始化行下標為 0,列下標為二維陣列的列數減 1
  • 重複下列步驟,直到行下標或列下標超出邊界
    • 獲得當前下標位置的元素 num
    • 如果 num 和 target 相等,返回 true
    • 如果 num 大於 target,列下標減 1
    • 如果 num 小於 target,行下標加 1
  • 迴圈體執行完畢仍未找到元素等於 target ,說明不存在這樣的元素,返回 false
class Solution {
public:
    bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
        if(matrix.size() == 0 || matrix[0].size() == 0) return false;
        int i = 0, j = matrix[0].size() - 1;
        while(i < matrix.size() && j >= 0)
        {
            if(matrix[i][j] == target) return true;
            else if(matrix[i][j] > target) j--;
            else i++;
        }
        return false;
    }
};