240. Search a 2D Matrix II
題目網址:https://leetcode.cn/problems/search-a-2d-matrix-ii/
題意:設計一高效演算法來搜索
m x n
matrix 中是否存在整數target
, matrix 滿足以下特性:
- 每行的元素由上到下按升序排列
- 每列的元素由左到右按升序排列
Solution 1:
想法:對每一列做 Binary Search, 判斷
target
是否在該列中,從而判斷target
是否出現
class Solution { |
- time:$O(m \cdot log(n))$ ➔ 對每一列做 Binary Search
- space:$O(1)$ ➔ 只需常數空間
Solution 2:
想法:利用 Z 字形搜索, 從
matrix
右上角(左下角也行)開始
若
matrix[row][col] == target
: 則 returntrue
若
matrix[row][col] > target
: 則代表matrix[row ~ m][col]
都比target
大, 故col - 1
若
matrix[row][col] < target
: 則代表matrix[row][col ~ n]
都比target
小, 故row + 1
class Solution { |
- time:$O(m + n)$ ➔ 在搜索的過程中,如果我們沒有找到
target
, 那麼我們要馬將y - 1
, 要馬將x + 1
。由於(x, y)
的初始值為(0, n - 1)
, 因此是y
最多能被減少n
次,x
最多能被增加m
次, 總搜索次數為m + n
- space:$O(1)$ ➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論