前端工程師的 LeetCode 之旅 - 夜喵 23

descire發表於2020-04-07



01
統計最大組的數目



題目描述【Easy】


給你一個整數 n 。請你先求出從 1 到 n 的每個整數 10 進製表示下的數位和(每一位上的數字相加),然後把數位和相等的數字放到同一個組中。
請你統計每個組中的數字數目,並返回數字數目並列最多的組有多少個。
示例:
輸入:n = 13
輸出:4
解釋:總共有 9 個組,將 1 到 13 按數位求和後這些組分別是:[1,10],[2,11],[3,12],[4,13],[5],[6],[7],[8],[9]。總共有 4 個組擁有的數字並列最多。



第一步:利用 JavaScript 中的 Map 資料結構統計各個數位和的個數。

第二步:找出最大的數位和的個數。

第三步:找出擁有最大個數的數位和的個數。

時間複雜度 O(n),空間複雜度 O(n)。

前端工程師的 LeetCode 之旅 - 夜喵 23




02
構造 K 個迴文字串



題目描述【Medium】


給你一個字串 s 和一個整數 k 。請你用 s 字串中 所有字元 構造 k 個非空 迴文串 。
如果你可以用 s 中所有字元構造 k 個迴文字串,那麼請你返回 True ,否則返回 False 。
示例:
輸入:s = 'annabelle', k = 2
輸出:true
解釋:可以用 s 中所有字元構造 2 個迴文字串。
一些可行的構造方案包括:'anna' + 'elble','anbna' + 'elle','anellena' + 'b'



一個字串為迴文字串有以下兩種狀態:

  • 字串長度為偶數時,需要保證各字元的數量為偶數

  • 字串長度為奇數時,需要保證只有一個字元的數量為奇數

那麼,同樣需要用 Map 資料結構統計各個字元的個數。

得到各個字元的數量之後,該字串能被分割幾組迴文子字串取決於奇數字符的個數,同時最多不可能超過字串本身的長度。(單個字元作為一個迴文子字串)

時間複雜度 O(n),空間複雜度 O(n)。

前端工程師的 LeetCode 之旅 - 夜喵 23




03
圓和矩形是否有重疊



題目描述【Medium】


給你一個以 (radius, x_center, y_center) 表示的圓和一個與座標軸平行的矩形 (x1, y1, x2, y2),其中 (x1, y1) 是矩形左下角的座標,(x2, y2) 是右上角的座標。
如果圓和矩形有重疊的部分,請你返回 True ,否則返回 False 。
換句話說,請你檢測是否 存在 點 (xi, yi) ,它既在圓上也在矩形上(兩者都包括點落在邊界上的情況)。
示例:
輸入:radius = 1, x_center = 0, y_center = 0, x1 = 1, y1 = -1, x2 = 3, y2 = 1
輸出:true
解釋:圓和矩形有公共點 (1,0)



本道題主要考察數學知識,圓與矩形相交有如下兩種情況:

  • 圓在矩形四周相交

  • 圓在矩形四個弧相交

時間複雜度 O(1),空間複雜度 O(1)。

前端工程師的 LeetCode 之旅 - 夜喵 23




04
廚師做菜順序的最大喜愛和



題目描述【Hard】


一個廚師收集了他 n 道菜的滿意程度 satisfaction ,這個廚師做出每道菜的時間都是 1 單位時間。
一道菜的 「喜愛時間」係數定義為烹飪這道菜以及之前每道菜所花費的時間乘以這道菜的滿意程度,也就是 time[i]*satisfaction[i] 。
請你返回做完所有菜 「喜愛時間」總和的最大值為多少。
你可以按 任意 順序安排做菜的順序,你也可以選擇放棄做某些菜來獲得更大的總和。
示例:
輸入:satisfaction = [-1,-8,0,5,-9]
輸出:14
解釋:去掉第二道和最後一道菜,最大的喜愛時間係數和為 (-1*1 + 0*2 + 5*3 = 14) 。每道菜都需要花費 1 單位時間完成。



本道題比較簡單,採用貪心策略,所以需要先排序,然後在統計的過程篩選最大和值即可。

時間複雜度 O(nlogn),空間複雜度 O(1)。

前端工程師的 LeetCode 之旅 - 夜喵 23




05
往期精彩回顧





前端工程師的 LeetCode 之旅 - 夜喵 23




相關文章