前往
大廳
主題

LeetCode - 766. Toeplitz Matrix 解題心得

Not In My Back Yard | 2021-01-10 00:00:06 | 巴幣 0 | 人氣 231

題目連結:


題目意譯:
給定一個 m × n 矩陣,回傳真(True)如果給定的矩陣為常對角矩陣(Diagonal-Constant Matrix,又稱 Toeplitz Matrix)。反之,回傳假(False)。

一個矩陣為常對角,其滿足每條從左上到右下的對角線上之元素皆有著相同的元素。

限制:
m == matrix.length
n == matrix[i].length
1 ≦ m 、 n ≦ 20
0 ≦ matrix[i][j] ≦ 99

進階:
如果矩陣儲存於硬碟上,且記憶體限制為一次最多只能讀取矩陣的一整列到主記憶體裡呢?
如果矩陣超大,你一次只能讀取部分列到主記憶體上呢?



範例測資:
範例 1:
輸入: matrix = [[1,2,3,4],[5,1,2,3],[9,5,1,2]]
輸出: true
解釋:
在上圖,對角線為:
[9] 、 [5, 5] 、 [1, 1, 1] 、 [2, 2, 2] 、 [3, 3] 、 [4]。
在每條對角線裡,元素都是相同的,所以答案為真。

範例 2:
輸入: matrix = [[1,2],[2,2]]
輸出: false
解釋:
對角線 [1, 2] 有著不同的元素。


解題思維:
因為對於每條對角線,每個元素都位於其他元素的左上或是右下方。因此我們實際上只需要檢查每個元素是否與其左上的元素一樣,如果都符合則代表給定的矩陣為常對角矩陣。

所以對於範例一的矩陣,我們只需要檢查紅框中的每個元素是否等於其左上元素:
而所有元素都符合,所以該矩陣是常對角矩陣。



進階一:
因為硬碟存取很慢,所以我們理應盡量減少不必要的存取。而我們可以觀察到對於每條對角線上所有元素,其列座標 - 行座標之值必為相同的。

因此,我們可以使用一個雜湊表(Hash Table)儲存每條對角線的元素(存一個就好,反正如果有存到其他不同的元素即代表該矩陣不是常對角),每次掃描就是看當前元素是否與同一條對角線上其他元素相同。

進階二:
與進階一同理即可。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作