1. 程式人生 > >刷題筆記1——有規律的二維陣列找target

刷題筆記1——有規律的二維陣列找target

題目描述

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

1、常規思路

當然是萬能的兩重for迴圈了,判斷它是不是等於要查詢的目標就可以了。

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

2、座標系方法

由於題目說明了陣列的每一行從左到右是遞增的,每一列從上到下是遞增的,那是不是和座標系很像呢?
那麼,就這麼找,如果要找的數小於當前的座標值,上移;如果要找的數大於當前的座標值,右移。
在這裡插入圖片描述

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