⏱須臾之間 最小時間差 Minimum Time Difference_Leetcode #539

更新於 發佈於 閱讀時間約 1 分鐘

題目敘述 539. Minimum Time Difference


給定一個輸入陣列timePoints,每個陣列元素都是一個24小時制的時間。

請問最小的時間差距是多少?

註:

請以分鐘為單位回答。


測試範例

Example 1:

Input: timePoints = ["23:59","00:00"]
Output: 1

Example 2:

Input: timePoints = ["00:00","23:59","00:00"]
Output: 0

約束條件

Constraints:

  • 2 <= timePoints.length <= 2 * 10^4

輸入陣列timePoints長度介於2~兩萬。

  • timePoints[i] is in the format "HH:MM".



示意圖

raw-image

演算法 Greedy策略 + 排序前處理


先把所有24小時制的timePoint轉成對應的minute分鐘總數。

接著排序所有時間點,從小到大排列。

如上圖所示,最小時間差值 = 相鄰的時間差距最小值

實作上有一個細節要留意,最早時間-最晚時間的時間差也要一併考慮進去,
算是一個corner case

60* 24 - timePoints[len(timePoints) - 1] + timePoints[0]


最後回傳最小時間差值作為答案回傳即可。


程式碼 Greedy策略 + 排序前處理

class Solution:
def toMin(self,time):
time = time.split(':')
minutes = (60*int(time[0])) + int(time[1])
return minutes

def findMinDifference(self, timePoints: List[str]) -> int:

# HH:MM to corresponding minutes
for i, time in enumerate(timePoints):
timePoints[i] = self.toMin(time)

time_gap = math.inf

# Sort timestamp in ascending order
timePoints.sort()

#calculate the closest time distance of each element except last
for i in range(0, len(timePoints) - 1):
time_gap = min(time_gap, (timePoints[i+1] - timePoints[i]))

# including corner case: 1st timestamp - last timestamp
time_gap = min(time_gap, 60* 24 - timePoints[len(timePoints) - 1] + timePoints[0])

return time_gap

複雜度分析

時間複雜度: O( n log n)

最重的成本落在排序,所需時間為O(n log n)

空間複雜度: O(1)

所用到的皆為固定尺寸臨時變數,所需空間為O(1)常數級別。


Reference

[1] Minimum Time Difference - LeetCode

留言
avatar-img
留言分享你的想法!
小松鼠-avatar-img
發文者
2024/09/17
林燃(創作小說家)
avatar-img
小松鼠的演算法樂園
95會員
427內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
2024/10/06
題目敘述 Rank Transform of an Array 給定一個陣列arr,請根據數字的大小給予序號,序號值介於1~len( set(arr) )之間。 最大的數字給予最大的序號。 次大的數字給予次大的序號。 ...依此類推 最小的數字給予最小的序號1。
Thumbnail
2024/10/06
題目敘述 Rank Transform of an Array 給定一個陣列arr,請根據數字的大小給予序號,序號值介於1~len( set(arr) )之間。 最大的數字給予最大的序號。 次大的數字給予次大的序號。 ...依此類推 最小的數字給予最小的序號1。
Thumbnail
2024/10/01
題目敘述 Check If Array Pairs Are Divisible by k 給定一個長度為偶數的整數陣列arr,和一個整數k 。 我們想把陣列元素兩兩一組組成pair,使得每個pair的總和可以被k整除。 如果做得到,返回True。 如果不行,返回False。
Thumbnail
2024/10/01
題目敘述 Check If Array Pairs Are Divisible by k 給定一個長度為偶數的整數陣列arr,和一個整數k 。 我們想把陣列元素兩兩一組組成pair,使得每個pair的總和可以被k整除。 如果做得到,返回True。 如果不行,返回False。
Thumbnail
2024/09/29
My Calendar II 給定一個行事曆的class定義和行程安排的介面。 請完成下列function 1.建構子MyCalendarTwo() 2.boolean book(int start, int end) 在行事曆加入一項新行程,起始時間為start, 結束時間為end。
Thumbnail
2024/09/29
My Calendar II 給定一個行事曆的class定義和行程安排的介面。 請完成下列function 1.建構子MyCalendarTwo() 2.boolean book(int start, int end) 在行事曆加入一項新行程,起始時間為start, 結束時間為end。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
539. Minimum Time Difference 給定一個輸入陣列timePoints,每個陣列元素都是一個24小時制的時間。 請問最小的時間差距是多少? 註: 請以分鐘為單位回答。
Thumbnail
539. Minimum Time Difference 給定一個輸入陣列timePoints,每個陣列元素都是一個24小時制的時間。 請問最小的時間差距是多少? 註: 請以分鐘為單位回答。
Thumbnail
題目敘述 Find K-th Smallest Pair Distance 給定一個輸入陣列nums和 參數k。 請找出第k小的pair distance是多少? pair distance定義為 abs( nums[i] - nums[j]), i 不等於j 也就是任意兩陣列元素差值的絕對值
Thumbnail
題目敘述 Find K-th Smallest Pair Distance 給定一個輸入陣列nums和 參數k。 請找出第k小的pair distance是多少? pair distance定義為 abs( nums[i] - nums[j]), i 不等於j 也就是任意兩陣列元素差值的絕對值
Thumbnail
題目敘述 Minimum Increment to Make Array Unique 給定一個整數陣列,每回合可以任意挑一個數字進行+1的加法操作。 請問最少需要多少次的+1加法操作,才能讓每個數字都相異?
Thumbnail
題目敘述 Minimum Increment to Make Array Unique 給定一個整數陣列,每回合可以任意挑一個數字進行+1的加法操作。 請問最少需要多少次的+1加法操作,才能讓每個數字都相異?
Thumbnail
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
Thumbnail
題目敘述 Longest Arithmetic Subsequence of Given Difference 給定一個整數陣列nums,請找出給定公差difference的最長的等差數列的長度是多少?
Thumbnail
題目敘述 Solving Questions With Brainpower 給定一個測驗題陣列,每個欄位都是一個pair, 分別記錄測驗題做完可以得到的分數,和需要的冷卻時間 (也就是會有一段時間不能作答接下來的題目)。 請問在最佳的答題策略下,最多可以獲得多少分數?
Thumbnail
題目敘述 Solving Questions With Brainpower 給定一個測驗題陣列,每個欄位都是一個pair, 分別記錄測驗題做完可以得到的分數,和需要的冷卻時間 (也就是會有一段時間不能作答接下來的題目)。 請問在最佳的答題策略下,最多可以獲得多少分數?
Thumbnail
題目已經給了依照起點升序排列好的區間陣列。 接下來新插入一個區間,插入後如果和原本的區間重疊,請把他們合併,要求我們輸出插入後的結果。 這是一個線性掃苗,所需時間為O(n)的演算法。 題目已經幫我們排序好區間順序,我們只要接著依序檢查區間、(假如有重疊的話)合併區間。
Thumbnail
題目已經給了依照起點升序排列好的區間陣列。 接下來新插入一個區間,插入後如果和原本的區間重疊,請把他們合併,要求我們輸出插入後的結果。 這是一個線性掃苗,所需時間為O(n)的演算法。 題目已經幫我們排序好區間順序,我們只要接著依序檢查區間、(假如有重疊的話)合併區間。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News