基本陣列操作 對角線之和 Matrix Diagonal Sum_Leetcode #1572

閱讀時間約 3 分鐘

這題的題目在這裡:Matrix Diagonal Sum

題目敘述

題目會給我們一個方陣,要求我們計算兩條對角線的元素總和。


測試範例

Example 1:

raw-image
Input: mat = [[1,2,3],
  [4,5,6],
  [7,8,9]]
Output: 25
Explanation: Diagonals sum: 1 + 5 + 9 + 3 + 7 = 25
Notice that element mat[1][1] = 5 is counted only once.

Example 2:

Input: mat = [[1,1,1,1],
  [1,1,1,1],
  [1,1,1,1],
  [1,1,1,1]]
Output: 8

Example 3:

Input: mat = [[5]]
Output: 5

約束條件

Constraints:

  • n == mat.length == mat[i].length
  • 1 <= n <= 100
  • 1 <= mat[i][j] <= 100

演算法

主對角線mat[i][i] 和

次要對角線mat[n-1-i][i]依序相加即可。

唯一的小細節要特別留意,當方陣的邊長n為奇數時,中心點的元素會被多計算一次,要記得扣掉


程式碼

class Solution:
 def diagonalSum(self, mat: List[List[int]]) -> int:
  
  # edge length of square matrix: n x n
  n = len(mat)

  summation = 0
  for i in range(n) :
   
   # primary diagnol
   summation += mat[i][i]

   # secondary diagnol
   summation += mat[n-1-i][i]

  # When n is odd,
  # avoid repeated computation on central element
  if n % 2 == 1:
   summation -= mat[n//2][n//2]

  return summation

複雜度分析

時間複雜度: O(n)

線性掃描,掃過主對角線和次對角線,總共耗時O(n)


空間複雜度: O(1)

所用到的都是固定尺寸的臨時變數,為常數級別O(1)


關鍵知識點

主對角線mat[i][i] 和

次要對角線mat[n-1-i][i]依序相加即可。

小細節要留意,當方陣的邊長n為奇數時,中心點的元素會被多計算一次,要記得扣掉

這種相對簡單的題目,比的是細心穩定度!


Reference:

[1] Python/JS/Java/Go/C++ O(n) by iteration [w/ Comment] - Matrix Diagonal Sum - LeetCode

82會員
417Content count
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目會給我們一個整數陣列nums,裡面都是正整數,而且陣列長度保證是偶數。 要求我們倆倆將所有整數配對成一組pair,要求我們最小化pair sum的極大值。
這題的題目在這裡:Gray Code 題目敘述 題目會給我們一個bit寬度n,要求我們造出所有格雷編碼。 格雷編碼就是一組二進位編碼,每兩個相鄰的編碼的hamming distance都是1。 如果第一次接觸的讀者,可以參考 Wiki Gray Code
題目會給我們一個字串陣列nums,內容都是二進位字串,要求我們造出一個另一個相等長度,新的二進位字串,而且不和字串陣列nums內的重複。 答案可能有不只一組,回傳合任一組合法的答案皆可。
題目會給我們一個字串s,內容都是由英文小寫字母組成,要求我們計算長度為3的回文子序列有多少個? 舉例,aba者種形式的序列,就是長度為3的回文序列。
題目會給我們一個routes 陣列,裡面都是分別代表每一條公車路線所對應的公車站編號。 題目要求我們計算出,從起點站source到終點站target的最精簡公車路線搭乘次數是幾次? 也就是說,就是在最少轉乘的前提下,旅途中需要搭乘幾條公車路線?
題目會給我們一個pair陣列,裡面都是原本陣列相鄰元素形成的pair,順序已經被打散。 要求我們從pair陣列重建出原本的陣列。 答案可能有不只一組,任選一組回傳即可。
題目會給我們一個整數陣列nums,裡面都是正整數,而且陣列長度保證是偶數。 要求我們倆倆將所有整數配對成一組pair,要求我們最小化pair sum的極大值。
這題的題目在這裡:Gray Code 題目敘述 題目會給我們一個bit寬度n,要求我們造出所有格雷編碼。 格雷編碼就是一組二進位編碼,每兩個相鄰的編碼的hamming distance都是1。 如果第一次接觸的讀者,可以參考 Wiki Gray Code
題目會給我們一個字串陣列nums,內容都是二進位字串,要求我們造出一個另一個相等長度,新的二進位字串,而且不和字串陣列nums內的重複。 答案可能有不只一組,回傳合任一組合法的答案皆可。
題目會給我們一個字串s,內容都是由英文小寫字母組成,要求我們計算長度為3的回文子序列有多少個? 舉例,aba者種形式的序列,就是長度為3的回文序列。
題目會給我們一個routes 陣列,裡面都是分別代表每一條公車路線所對應的公車站編號。 題目要求我們計算出,從起點站source到終點站target的最精簡公車路線搭乘次數是幾次? 也就是說,就是在最少轉乘的前提下,旅途中需要搭乘幾條公車路線?
題目會給我們一個pair陣列,裡面都是原本陣列相鄰元素形成的pair,順序已經被打散。 要求我們從pair陣列重建出原本的陣列。 答案可能有不只一組,任選一組回傳即可。
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
C# 陣列 – (C#教學) – Array為程式設計中最基本元素之一. 陣列就是用一個variable記下多個同類的值(記憶體中的位置), 以供日後所調用. 相關頁面: C# List – 學會List的5種基本應用方法 – 初始化, 加入值, 更新值, 刪除值, foreach迴圈
Thumbnail
世界上大部分讓人感到可怕的事,都是來自於未知,而所謂的「未知」,一般都是來自於肉眼看不到的事物,例如靈砂紀錄中的前世故事。有人說,人根本無法改變過去,那為什麼要知道過去──更甚是根本無法證實是否發生過的事情?
Thumbnail
你有沒有試過讀完一句句子,所有詞彙都簡單易明,可是不管讀多少次都不明白這句話的意思?又或者你有沒有試過讀完一個故事,明明很喜歡,卻在不久後難以跟其他人複述內容?你有沒有些過,忽然沉醉於某個故事當中,但這份狂熱又突然消失?這就是觸動靈魂碎片的例子。
Thumbnail
去年在噗浪中替旅人解讀他們的隨機id號碼,發現很多時候大家都會陷入一種循環裡,被困於一種環境中,或一種模式裡,逃不了。事實上,會陷入循環裡的主因一般跟前世靈魂碎片有關,而前世經歷會掉落碎片則跟感受與記憶有關。要記得,我們如今所擁有的,並不是「過去二號」,而是「未來一號」。
Thumbnail
許多事,不管好事、壞事,都是一連串的機運、巧合接續才有最後的結果,但我們通常沒有那個時間與心力細究,只想快速找出一個說法。這樣的大腦結構在演化上有意義,一來這是一個快速理解世界的方法,我們的大腦需要一個又一個「故事」來打造世界觀;二來認真思考很傷大腦資源、我們需要比較省力的思考模式。
Thumbnail
或許你不知道,「詛咒」與「祝福」的能量其實是相同的,因為「能量」沒有眼睛,不會劃分「好」與「壞」。那麼,為什麼這個世界上又會有「詛咒」和「祝福」,「黑魔法」和「白魔法」呢?「詛咒」一個人有什麼後果?「詛咒」會在什麼時候有效?
Thumbnail
或許神秘學就活在了日常當中,只是被人們習慣了,沒有被發現。事實上,我曾經有一名客戶對於「性愛」有恐懼,解讀碎片後發現她在進行性行為時,因為潛意識憶起被強暴的記憶,導致在現實中進行性行為時會有驚恐的感覺,亦即「觸碎」──觸動了靈魂碎片。而要解決這些問題,就需要解讀靈砂紀錄,即由靈魂碎片組成的紀錄。
Thumbnail
陣形不是拉的越長,攻擊面越大就越有優勢,越短不見得較差,反過來說沒有參加作戰的人多,前後排交換得宜的話可以保留體力。總之,一切要看當時的環境,軍隊的訓練度,以及臨場反應配合,沒有標準答案。
Thumbnail
通常在賽道上我最常遇到的提問是:xx彎要怎麼過? 當然不同的彎道有不同的處理方式,雖然賽道上我們追求的是時間,但同樣的方式應用在街道上也能得到安全順暢的駕駛效果 轉角處理的基本三大原則: 充分減速:減速到什麼程度依照彎道類型和實際訴求而定,賽道上大致上就是「能夠全速衝進彎道並瞄準apex」的程度 積
Thumbnail
情報操作是很細膩的,在小細節上不是專業的,或是筆者這種每篇都想解構的神經病,你看不出來。原因不是智力水準不夠,或是看得不夠多,純粹是一般人在接收資訊時,會有兩個特點。第一個特點,就是你通常會想接受想看的……
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
C# 陣列 – (C#教學) – Array為程式設計中最基本元素之一. 陣列就是用一個variable記下多個同類的值(記憶體中的位置), 以供日後所調用. 相關頁面: C# List – 學會List的5種基本應用方法 – 初始化, 加入值, 更新值, 刪除值, foreach迴圈
Thumbnail
世界上大部分讓人感到可怕的事,都是來自於未知,而所謂的「未知」,一般都是來自於肉眼看不到的事物,例如靈砂紀錄中的前世故事。有人說,人根本無法改變過去,那為什麼要知道過去──更甚是根本無法證實是否發生過的事情?
Thumbnail
你有沒有試過讀完一句句子,所有詞彙都簡單易明,可是不管讀多少次都不明白這句話的意思?又或者你有沒有試過讀完一個故事,明明很喜歡,卻在不久後難以跟其他人複述內容?你有沒有些過,忽然沉醉於某個故事當中,但這份狂熱又突然消失?這就是觸動靈魂碎片的例子。
Thumbnail
去年在噗浪中替旅人解讀他們的隨機id號碼,發現很多時候大家都會陷入一種循環裡,被困於一種環境中,或一種模式裡,逃不了。事實上,會陷入循環裡的主因一般跟前世靈魂碎片有關,而前世經歷會掉落碎片則跟感受與記憶有關。要記得,我們如今所擁有的,並不是「過去二號」,而是「未來一號」。
Thumbnail
許多事,不管好事、壞事,都是一連串的機運、巧合接續才有最後的結果,但我們通常沒有那個時間與心力細究,只想快速找出一個說法。這樣的大腦結構在演化上有意義,一來這是一個快速理解世界的方法,我們的大腦需要一個又一個「故事」來打造世界觀;二來認真思考很傷大腦資源、我們需要比較省力的思考模式。
Thumbnail
或許你不知道,「詛咒」與「祝福」的能量其實是相同的,因為「能量」沒有眼睛,不會劃分「好」與「壞」。那麼,為什麼這個世界上又會有「詛咒」和「祝福」,「黑魔法」和「白魔法」呢?「詛咒」一個人有什麼後果?「詛咒」會在什麼時候有效?
Thumbnail
或許神秘學就活在了日常當中,只是被人們習慣了,沒有被發現。事實上,我曾經有一名客戶對於「性愛」有恐懼,解讀碎片後發現她在進行性行為時,因為潛意識憶起被強暴的記憶,導致在現實中進行性行為時會有驚恐的感覺,亦即「觸碎」──觸動了靈魂碎片。而要解決這些問題,就需要解讀靈砂紀錄,即由靈魂碎片組成的紀錄。
Thumbnail
陣形不是拉的越長,攻擊面越大就越有優勢,越短不見得較差,反過來說沒有參加作戰的人多,前後排交換得宜的話可以保留體力。總之,一切要看當時的環境,軍隊的訓練度,以及臨場反應配合,沒有標準答案。
Thumbnail
通常在賽道上我最常遇到的提問是:xx彎要怎麼過? 當然不同的彎道有不同的處理方式,雖然賽道上我們追求的是時間,但同樣的方式應用在街道上也能得到安全順暢的駕駛效果 轉角處理的基本三大原則: 充分減速:減速到什麼程度依照彎道類型和實際訴求而定,賽道上大致上就是「能夠全速衝進彎道並瞄準apex」的程度 積
Thumbnail
情報操作是很細膩的,在小細節上不是專業的,或是筆者這種每篇都想解構的神經病,你看不出來。原因不是智力水準不夠,或是看得不夠多,純粹是一般人在接收資訊時,會有兩個特點。第一個特點,就是你通常會想接受想看的……