基本陣列操作 對角線之和 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

88會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言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陣列重建出原本的陣列。 答案可能有不只一組,任選一組回傳即可。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
-有關算命並沒有年齡的限制,基本上,人愈早算命愈好,因為能即時掌握命運趨勢,對人生過程的發展會處於更有利局面,且能「趨吉避凶」。
Thumbnail
中土佐町位於高知縣中西部,面向太平洋海岸,東邊是土佐灣,本町大致分為沿海區域和海拔300公尺以上、四面環山的台地區域,由於各自的歷史和氣候,兩個地區都形成了獨特的文化,祖先在利用地理特色的同時,也過著繁榮的生活;四萬十川流蜿蜒流經町內,兩岸有耕地,村莊星羅棋布,當地人口多集中在沿海地區,位於中心地區
re 模組基本介紹 re 模組是 Python 用來處理正則表達式的標準模組。 正則表達式是一種用於描述字串模式的語法,可以用來匹配、搜尋、分割和替換字串中的特定模式。
Thumbnail
題目會給我們一個方陣,要求我們計算兩條對角線的元素總和。
Thumbnail
C# 陣列 – (C#教學) – Array為程式設計中最基本元素之一. 陣列就是用一個variable記下多個同類的值(記憶體中的位置), 以供日後所調用. 相關頁面: C# List – 學會List的5種基本應用方法 – 初始化, 加入值, 更新值, 刪除值, foreach迴圈
Thumbnail
世界上大部分讓人感到可怕的事,都是來自於未知,而所謂的「未知」,一般都是來自於肉眼看不到的事物,例如靈砂紀錄中的前世故事。有人說,人根本無法改變過去,那為什麼要知道過去──更甚是根本無法證實是否發生過的事情?
Thumbnail
你有沒有試過讀完一句句子,所有詞彙都簡單易明,可是不管讀多少次都不明白這句話的意思?又或者你有沒有試過讀完一個故事,明明很喜歡,卻在不久後難以跟其他人複述內容?你有沒有些過,忽然沉醉於某個故事當中,但這份狂熱又突然消失?這就是觸動靈魂碎片的例子。
Thumbnail
去年在噗浪中替旅人解讀他們的隨機id號碼,發現很多時候大家都會陷入一種循環裡,被困於一種環境中,或一種模式裡,逃不了。事實上,會陷入循環裡的主因一般跟前世靈魂碎片有關,而前世經歷會掉落碎片則跟感受與記憶有關。要記得,我們如今所擁有的,並不是「過去二號」,而是「未來一號」。
Thumbnail
許多事,不管好事、壞事,都是一連串的機運、巧合接續才有最後的結果,但我們通常沒有那個時間與心力細究,只想快速找出一個說法。這樣的大腦結構在演化上有意義,一來這是一個快速理解世界的方法,我們的大腦需要一個又一個「故事」來打造世界觀;二來認真思考很傷大腦資源、我們需要比較省力的思考模式。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
11/20日NVDA即將公布最新一期的財報, 今天Sell Side的分析師, 開始調高目標價, 市場的股價也開始反應, 未來一週NVDA將重新回到美股市場的焦點, 今天我們要分析NVDA Sell Side怎麼看待這次NVDA的財報預測, 以及實際上Buy Side的倉位及操作, 從
Thumbnail
Hi 大家好,我是Ethan😊 相近大家都知道保濕是皮膚保養中最基本,也是最重要的一步。無論是在畫室裡長時間對著畫布,還是在旅途中面對各種氣候變化,保持皮膚的水分平衡對我來說至關重要。保濕化妝水不僅能迅速為皮膚補水,還能提升後續保養品的吸收效率。 曾經,我的保養程序簡單到只包括清潔和隨意上乳液
Thumbnail
-有關算命並沒有年齡的限制,基本上,人愈早算命愈好,因為能即時掌握命運趨勢,對人生過程的發展會處於更有利局面,且能「趨吉避凶」。
Thumbnail
中土佐町位於高知縣中西部,面向太平洋海岸,東邊是土佐灣,本町大致分為沿海區域和海拔300公尺以上、四面環山的台地區域,由於各自的歷史和氣候,兩個地區都形成了獨特的文化,祖先在利用地理特色的同時,也過著繁榮的生活;四萬十川流蜿蜒流經町內,兩岸有耕地,村莊星羅棋布,當地人口多集中在沿海地區,位於中心地區
re 模組基本介紹 re 模組是 Python 用來處理正則表達式的標準模組。 正則表達式是一種用於描述字串模式的語法,可以用來匹配、搜尋、分割和替換字串中的特定模式。
Thumbnail
題目會給我們一個方陣,要求我們計算兩條對角線的元素總和。
Thumbnail
C# 陣列 – (C#教學) – Array為程式設計中最基本元素之一. 陣列就是用一個variable記下多個同類的值(記憶體中的位置), 以供日後所調用. 相關頁面: C# List – 學會List的5種基本應用方法 – 初始化, 加入值, 更新值, 刪除值, foreach迴圈
Thumbnail
世界上大部分讓人感到可怕的事,都是來自於未知,而所謂的「未知」,一般都是來自於肉眼看不到的事物,例如靈砂紀錄中的前世故事。有人說,人根本無法改變過去,那為什麼要知道過去──更甚是根本無法證實是否發生過的事情?
Thumbnail
你有沒有試過讀完一句句子,所有詞彙都簡單易明,可是不管讀多少次都不明白這句話的意思?又或者你有沒有試過讀完一個故事,明明很喜歡,卻在不久後難以跟其他人複述內容?你有沒有些過,忽然沉醉於某個故事當中,但這份狂熱又突然消失?這就是觸動靈魂碎片的例子。
Thumbnail
去年在噗浪中替旅人解讀他們的隨機id號碼,發現很多時候大家都會陷入一種循環裡,被困於一種環境中,或一種模式裡,逃不了。事實上,會陷入循環裡的主因一般跟前世靈魂碎片有關,而前世經歷會掉落碎片則跟感受與記憶有關。要記得,我們如今所擁有的,並不是「過去二號」,而是「未來一號」。
Thumbnail
許多事,不管好事、壞事,都是一連串的機運、巧合接續才有最後的結果,但我們通常沒有那個時間與心力細究,只想快速找出一個說法。這樣的大腦結構在演化上有意義,一來這是一個快速理解世界的方法,我們的大腦需要一個又一個「故事」來打造世界觀;二來認真思考很傷大腦資源、我們需要比較省力的思考模式。