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

更新於 2024/11/18閱讀時間約 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

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目會給我們一個整數陣列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陣列重建出原本的陣列。 答案可能有不只一組,任選一組回傳即可。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
-有關算命並沒有年齡的限制,基本上,人愈早算命愈好,因為能即時掌握命運趨勢,對人生過程的發展會處於更有利局面,且能「趨吉避凶」。
Thumbnail
中土佐町位於高知縣中西部,面向太平洋海岸,東邊是土佐灣,本町大致分為沿海區域和海拔300公尺以上、四面環山的台地區域,由於各自的歷史和氣候,兩個地區都形成了獨特的文化,祖先在利用地理特色的同時,也過著繁榮的生活;四萬十川流蜿蜒流經町內,兩岸有耕地,村莊星羅棋布,當地人口多集中在沿海地區,位於中心地區
re 模組基本介紹 re 模組是 Python 用來處理正則表達式的標準模組。 正則表達式是一種用於描述字串模式的語法,可以用來匹配、搜尋、分割和替換字串中的特定模式。
Thumbnail
題目會給我們一個方陣,要求我們計算兩條對角線的元素總和。
Thumbnail
C# 陣列 – (C#教學) – Array為程式設計中最基本元素之一. 陣列就是用一個variable記下多個同類的值(記憶體中的位置), 以供日後所調用. 相關頁面: C# List – 學會List的5種基本應用方法 – 初始化, 加入值, 更新值, 刪除值, foreach迴圈
Thumbnail
世界上大部分讓人感到可怕的事,都是來自於未知,而所謂的「未知」,一般都是來自於肉眼看不到的事物,例如靈砂紀錄中的前世故事。有人說,人根本無法改變過去,那為什麼要知道過去──更甚是根本無法證實是否發生過的事情?
Thumbnail
你有沒有試過讀完一句句子,所有詞彙都簡單易明,可是不管讀多少次都不明白這句話的意思?又或者你有沒有試過讀完一個故事,明明很喜歡,卻在不久後難以跟其他人複述內容?你有沒有些過,忽然沉醉於某個故事當中,但這份狂熱又突然消失?這就是觸動靈魂碎片的例子。
Thumbnail
去年在噗浪中替旅人解讀他們的隨機id號碼,發現很多時候大家都會陷入一種循環裡,被困於一種環境中,或一種模式裡,逃不了。事實上,會陷入循環裡的主因一般跟前世靈魂碎片有關,而前世經歷會掉落碎片則跟感受與記憶有關。要記得,我們如今所擁有的,並不是「過去二號」,而是「未來一號」。
Thumbnail
許多事,不管好事、壞事,都是一連串的機運、巧合接續才有最後的結果,但我們通常沒有那個時間與心力細究,只想快速找出一個說法。這樣的大腦結構在演化上有意義,一來這是一個快速理解世界的方法,我們的大腦需要一個又一個「故事」來打造世界觀;二來認真思考很傷大腦資源、我們需要比較省力的思考模式。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
-有關算命並沒有年齡的限制,基本上,人愈早算命愈好,因為能即時掌握命運趨勢,對人生過程的發展會處於更有利局面,且能「趨吉避凶」。
Thumbnail
中土佐町位於高知縣中西部,面向太平洋海岸,東邊是土佐灣,本町大致分為沿海區域和海拔300公尺以上、四面環山的台地區域,由於各自的歷史和氣候,兩個地區都形成了獨特的文化,祖先在利用地理特色的同時,也過著繁榮的生活;四萬十川流蜿蜒流經町內,兩岸有耕地,村莊星羅棋布,當地人口多集中在沿海地區,位於中心地區
re 模組基本介紹 re 模組是 Python 用來處理正則表達式的標準模組。 正則表達式是一種用於描述字串模式的語法,可以用來匹配、搜尋、分割和替換字串中的特定模式。
Thumbnail
題目會給我們一個方陣,要求我們計算兩條對角線的元素總和。
Thumbnail
C# 陣列 – (C#教學) – Array為程式設計中最基本元素之一. 陣列就是用一個variable記下多個同類的值(記憶體中的位置), 以供日後所調用. 相關頁面: C# List – 學會List的5種基本應用方法 – 初始化, 加入值, 更新值, 刪除值, foreach迴圈
Thumbnail
世界上大部分讓人感到可怕的事,都是來自於未知,而所謂的「未知」,一般都是來自於肉眼看不到的事物,例如靈砂紀錄中的前世故事。有人說,人根本無法改變過去,那為什麼要知道過去──更甚是根本無法證實是否發生過的事情?
Thumbnail
你有沒有試過讀完一句句子,所有詞彙都簡單易明,可是不管讀多少次都不明白這句話的意思?又或者你有沒有試過讀完一個故事,明明很喜歡,卻在不久後難以跟其他人複述內容?你有沒有些過,忽然沉醉於某個故事當中,但這份狂熱又突然消失?這就是觸動靈魂碎片的例子。
Thumbnail
去年在噗浪中替旅人解讀他們的隨機id號碼,發現很多時候大家都會陷入一種循環裡,被困於一種環境中,或一種模式裡,逃不了。事實上,會陷入循環裡的主因一般跟前世靈魂碎片有關,而前世經歷會掉落碎片則跟感受與記憶有關。要記得,我們如今所擁有的,並不是「過去二號」,而是「未來一號」。
Thumbnail
許多事,不管好事、壞事,都是一連串的機運、巧合接續才有最後的結果,但我們通常沒有那個時間與心力細究,只想快速找出一個說法。這樣的大腦結構在演化上有意義,一來這是一個快速理解世界的方法,我們的大腦需要一個又一個「故事」來打造世界觀;二來認真思考很傷大腦資源、我們需要比較省力的思考模式。