Leetcode Weekly Contest94 解題報告

caibirdme發表於2018-07-26

之前看有同學建議大家一起沒事兒做做 leetcode,我最近也重新開始刷刷題,所以之後如果沒有特別的情況,我都會把每週 contest 的解題報告發到這裡。如果不知道 leetcode 每週 contest 的同學可以看這裡,題目難度適中

contest 94

葉子相似的樹

原題連結

考慮一個二叉樹的所有葉子。這些葉子的值按從左到右的順序排列形成一個 葉值序列 。 tree 舉個例子,給定一個如上圖所示的樹,其葉值序列為 (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。本場算是個二分查詢專項訓練吧

更多原創文章乾貨分享,請關注公眾號
  • Leetcode Weekly Contest94 解題報告
  • 加微信實戰群請加微信(註明:實戰群):gocnio

相關文章