編寫乙個高效的演算法來搜尋 m x n 矩陣 matrix 中的乙個目標值 target。該矩陣具有以下特性:
每行的元素從左到右公升序排列。
每列的元素從上到下公升序排列。
示例:現有矩陣 matrix 如下:
給定 target = 5,返回 true。
給定 target = 20,返回 false。
因為二維陣列每行每列都是遞增的,從二維陣列右上角開始比較,如果target < nums[row][col]則row++,
如果target > nums[row][col]則col–,否則就找到target。
class
solution
int rows = matrix.
size()
;int cols = matrix[0]
.size()
;int row =0;
int col = cols -1;
while
(row < rows && col >=0)
else
if(matrix[row]
[col]
> target)
else
}return
false;}
};
時間複雜度:o(n+m)。
時間複雜度分析的關鍵是注意到在每次迭代(我們不返回 true)時,行或列都會精確地遞減/遞增一次。由於行只能增加 m 次,而列只能減少n 次,因此在導致 while 迴圈終止之前,迴圈不能執行超過 n+m 次。因為所有其他的工作都是常數,所以總的時間複雜度在矩陣維數之和中是線性的。
空間複雜度:o(1),因為這種方法只處理幾個指標,所以它的記憶體占用是恆定的。
3 二維陣列中的查詢
參考 二分查詢方法 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。方法一 劍指offer中提供的方法 如果我們從左上角開始查詢,那麼當查詢元素比左上元素大時,無法判斷是應該向下 向...
3)二維陣列中的查詢
題目 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。思路 這個題目相對前面三題比較簡單,假設該二維陣列為下圖 a 主要是思路上面過去,實現起來挺簡單的,下面我介紹一下實現思路,有種...
3 二維陣列中的查詢
題目描述 在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。解析 取二維陣列的右上方的頂點與要找的數字比較,如果要找的數字比頂點的數字小,那麼捨棄該列 colu...