↓快轉到主要內容
  1. LeetCode/

LeetCode 744: Find Smallest Letter Greater Than Target

·1 分鐘· ·
LeetCode Easy Array Binary-Search
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-09-03

  • 提交紀錄:Wrong Answer ×2 → Runtime Error ×2 → Wrong Answer ×5 → Accepted ×2 → Wrong Answer → Time Limit Exceeded ×2 → Accepted

解題思路
#

已排序的字母裡找第一個嚴格大於 target 的,也就是 upper bound(Binary Search 模板一),用 bisect_right。如果所有字母都 <= target,題目要繞回第一個,用 % len 處理。

我的嘗試
#

這題提交了 15 次。一開始想用 ord 加 26 處理繞回:比 target 小的字母都加 26 再取最小,但最後回傳了數字(123)或 chr 之後沒有減回 26('{'),例如 ['a', 'h']、target = 'j':答案 'a'。改成二分之後有兩版區間縮不動(TLE)。

正確解法
#

class Solution:
    def nextGreatestLetter(self, letters: List[str], target: str) -> str:
        return letters[bisect.bisect_right(letters, target) % len(letters)]

複雜度
#

時間 O(log n),空間 O(1)。

要特別避免的錯誤
#

  • 是嚴格大於,等於 target 的不算,所以是 bisect_right。
  • 回傳的是字母,不是 ord 的數字。

面試口說整理
#

我用 bisect_right 找第一個嚴格大於目標的字母的位置,超出範圍時取餘數繞回第一個。時間 O(log n)。

相關文章

LeetCode 704: Binary Search
·1 分鐘
LeetCode Easy Array Binary-Search
LeetCode 704 解題筆記:左閉右閉區間 [l, r],mid 用整數除法;找到就回傳,否則依大小縮掉一半
LeetCode 268: Missing Number
·1 分鐘
LeetCode Easy Array Hash-Table Math Binary-Search
LeetCode 268 解題筆記:0 到 n 的總和減掉陣列總和就是缺的那個;缺的可能是 0
LeetCode 35: Search Insert Position
·1 分鐘
LeetCode Easy Array Binary-Search
LeetCode 35 解題筆記:找第一個 >= target 的位置(lower bound);半開區間 [l, r) 要配 r = mid,不能寫 r = mid - 1
LeetCode 349: Intersection of Two Arrays
·1 分鐘
LeetCode Easy Array Hash-Table Two-Pointers Binary-Search
LeetCode 349 解題筆記:兩個陣列各轉成集合取交集
LeetCode 350: Intersection of Two Arrays II
·1 分鐘
LeetCode Easy Array Hash-Table Two-Pointers Binary-Search
LeetCode 350 解題筆記:保留重複次數的交集,Counter 相交(&)取兩邊次數的較小值
LeetCode 733: Flood Fill
·1 分鐘
LeetCode Easy Array Depth-First-Search Breadth-First-Search Matrix
LeetCode 733 解題筆記:從起點 DFS / BFS,四個方向上跟起點原本顏色相同的格子都換成新顏色;新舊顏色相同時直接回傳