Leetcode Weekly Contest94 解題報告
之前看有同學建議大家一起沒事兒做做 leetcode,我最近也重新開始刷刷題,所以之後如果沒有特別的情況,我都會把每週 contest 的解題報告發到這裡。如果不知道 leetcode 每週 contest 的同學可以看這裡,題目難度適中
contest 94
葉子相似的樹
考慮一個二叉樹的所有葉子。這些葉子的值按從左到右的順序排列形成一個 葉值序列 。 舉個例子,給定一個如上圖所示的樹,其葉值序列為 (6, 7, 4, 9, 8) 如果兩個二叉樹的葉值序列相同,我們就認為它們是 葉相似的。 如果給定的兩個頭結點分別為 root1 和 root2 的樹是葉相似的,返回 true;否則返回 false 。
題解
因為葉子節點是從左到右,通過一次後序遍歷就能得到,每次到葉子節點就把值加入陣列。因此這道題其實就是在考後序遍歷,送分題 AC 程式碼: 872
行走機器人模擬
題目其實就是說,有三種指令:
- 前進 K 步(K<=9)
- 左轉
- 右轉
然後地圖上有障礙,如果機器人前進的過程中遇到障礙,那就停在障礙前面等待下一個指令。 機器人一開始在原點 (0,0),朝北,輸入一串指令,問機器人最遠離原點有多遠
題解
這其實也是一道簡單題,由於 K<=9,甚至可以一步一步地模擬看有沒有障礙。如果不加 K<=9,這道題會複雜一點。這道題我由於一開始讀題有問題,以為是問所有指令執行完離原點有多遠,因此沒有在每執行完一個指令都算一下距離,導致一直錯…尷尬。其實很簡單的題目,就不多說了。 AC 程式碼:873
愛吃香蕉的珂珂
珂珂喜歡吃香蕉。這裡有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警衛已經離開了,將在 H 小時後回來。 珂珂可以決定她吃香蕉的速度 K (單位:根/小時)。每個小時,她將會選擇一堆香蕉,從中吃掉 K 根。如果這堆香蕉少於 K 根,她將吃掉這堆的所有香蕉,然後這一小時內不會再吃更多的香蕉。
珂珂喜歡慢慢吃,但仍然想在警衛回來前吃掉所有的香蕉。 返回她可以在 H 小時內吃掉所有香蕉的最小速度 K(K 為整數)。
題解
簡化一下題目:一共有 N 個數,科科每次操作可以選一個數減去 K,要求 H 次操作後要把所有數變成非正數,問這個 K 最小是多少。
- 因為有 N 個數,每次操作一個,因此如果 H<N,肯定是無解的
- 如果 N 等於 H,就代表說每次操作都得把那個數變成<=0,因此這個 K 一定要和 N 個數中最大的那個數相同,才能保證在對那個數執行操作時把它置零
也就是說,K 最大不超過 N 個數的最大值。 其實這種最大值最小
的問題,基本上都可以往二分上面想。 如果 K 取 M 時,H 次操作可以把 N 個數置零 (<=0),那麼顯而易見的,K>=M 時,同樣滿足。因此我們可以二分一個答案然後驗證。 顯而易見的,1<= K <= maxN,所以我們可以先嚐試看 k= (1+maxN)/2
當 k = mid = (1+maxN)/2 時,看能否通過 H 次操作完成"置零",如果可以,那麼答案一定<=mid,如果不行,答案一定>mid。其實也是簡單題,就不多說了。
AC 程式碼
最長的斐波那契子序列的長度
如果序列 X_1, X_2, ..., X_n 滿足下列條件,就說它是 斐波那契式 的:
- n >= 3
- 對於所有 i + 2 <= n,都有 X_i + X_{i+1} = X_{i+2}
給定一個嚴格遞增的正整數陣列形成序列,找到 A 中最長的斐波那契式的子序列的長度。如果一個不存在,返回 0 。
(回想一下,子序列是從原序列 A 中派生出來的,它從 A 中刪掉任意數量的元素(也可以不刪),而不改變其餘元素的順序。例如, [3, 5, 8] 是 [3, 4, 5, 6, 7, 8] 的一個子序列)
題解
根據題目定義, fib 數列中 x[i]=x[i-1]+x[i-2],這意味著,只要知道了 fib 數列的前兩項,我們就可以推出後面的無數項,回想一下我們熟知的 fib 數列 0 1 1 2 3 5 8 .... 只要給你 0 1,後面的就很容易算出來了。 因此一個簡單的想法就是,列舉 fib 數列的前兩項,然後基於這兩個數看能擴充套件出多長的序列。比如已知前兩項是 a b,第三項就是 a+b。a+b 必須在原序列 A 中,a b a+b 才是 A 的子序列。怎麼判斷 a+b 是否在 A 中呢?顯然,二分查詢,因為 A 是嚴格遞增的。複雜度是 O(N^2*logN)。 AC 程式碼
總結
這場比賽其實還是比較簡單的,後兩題也不過是 medium。本場算是個二分查詢專項訓練吧
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- Leetcode Weekly Contest 95解題報告LeetCode
- LeetCode Weekly Contest 96 解題報告LeetCode
- Leetcode 第136場周賽解題報告LeetCode
- 【LeetCode】253. Meeting Rooms II 解題報告(C++)LeetCodeOOMC++
- 【LeetCode】416. Partition Equal Subset Sum 解題報告(Python & C++)LeetCodePythonC++
- [熵值] 解題報告熵
- Kotlin Weekly 中文週報 —— 17Kotlin
- Kotlin Weekly 中文週報 —— 18Kotlin
- ARC173 解題報告
- P11188 解題報告
- SP30906 解題報告
- P10499 解題報告
- [leetcode 題解] 849LeetCode
- Leetcode 全套題解LeetCode
- LeetCode題解第122題LeetCode
- CF720B 解題報告
- Leetcode 565 & 240 題解LeetCode
- LeetCode 解題彙總LeetCode
- Leetcode題解1-50題LeetCode
- leetcode題解(陣列問題)LeetCode陣列
- 杭電OJ1040解題報告
- P10935 銀河 解題報告
- leetcode題解(查詢表問題)LeetCode
- 【leetcode 399 周賽】【題解】LeetCode
- leetcode題解【持續更新】LeetCode
- 11.1NOIP模擬賽解題報告
- Codeforces Round #537 (Div. 2)解題報告
- P10958 啟示錄 解題報告
- P10934 西瓜種植 解題報告
- 解題報告-論對“匹配”的新理解
- Codeforces Round 992 (Div. 2) 解題報告
- 用指令碼整理Leetcode題解指令碼LeetCode
- leetcode題解(動態規劃)LeetCode動態規劃
- [LeetCode解題] -- 零錢兌換LeetCode
- 03/10/2024 上課筆記 & 解題報告筆記
- leetcode題解(0-1揹包問題)LeetCode
- LeetCode解題記錄(雙指標專題)LeetCode指標
- leetcode 解題 2.兩數相加-python3 題解LeetCodePython