(因為自己的基礎實在太薄弱了,所以打算每天在leetcode上刷幾道題來彌補基礎知識)
455.分發餅乾(難度:容易)初始化孩子陣列g,餅乾陣列s,結果返回數值變數num假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多只能給一塊餅乾。對每個孩子 i ,都有乙個胃口值 gi ,這是能讓孩子們滿足胃口的餅乾的最小尺寸;並且每塊餅乾 j ,都有乙個尺寸 sj 。如果 sj >= gi ,我們可以將這個餅乾 j 分配給孩子 i ,這個孩子會得到滿足。你的目標是盡可能滿足越多數量的孩子,並輸出這個最大數值。
注意:
你可以假設胃口值為正。
乙個小朋友最多只能擁有一塊餅乾。
示例 1:
示例 2:輸入: [1,2,3], [1,1]
輸出: 1
解釋:
你有三個孩子和兩塊小餅乾,3個孩子的胃口值分別是:1,2,3。
雖然你有兩塊小餅乾,由於他們的尺寸都是1,你只能讓胃口值是1的孩子滿足。
所以你應該輸出1。
輸入: [1,2], [1,2,3]
輸出: 2
解釋:
你有兩個孩子和三塊小餅乾,2個孩子的胃口值分別是1,2。
你擁有的餅乾數量和尺寸都足以讓所有孩子滿足。
所以你應該輸出2.
很久沒做演算法題,思維已經變得很僵化了。
第一次思路:讓餅乾尺寸對應孩子胃口。對於第乙個餅乾尺寸遍歷孩子陣列,假如該餅乾尺寸滿足某孩子胃口,則將該孩子胃口變成無限大(相當於以後餅乾的分配會忽略掉該孩子),num++,然後跳出遍歷的迴圈進入下乙個餅乾的判定,直到所有餅乾都判定過了,返回num。
結果:錯誤,因為這個思路忽視了最優化,比如g=[1,2,3],s=[5,2,1],那麼根據這個思路第乙個餅乾5會分配給胃口1的孩子,這顯然不是最優解。最優情況應該是讓尺寸5的餅乾分配給胃口3的孩子。
第二次思路:每塊餅乾遍歷所有的孩子,找出餅乾尺寸和胃口最小的差值(大於0),然後依此分配。(企圖達到最優化)
結果:超時(emmmm)。這種思路時間複雜度相當於o(m*n),耗時有點大……
第三次思路:先用快排從小到大排序g和s,然後再進行第一次思路的演算法……(快排演算法參照的是阮一峰老師的快排,但是看一大堆人說這是錯誤的方法……暫時不懂)
結果:總算成功了……
整道題用時差不多1個小時吧orz
leetcode刷題記錄
我覺得每天來兩道,練習練習,再看看人家是怎麼優化的。1.給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。c 暴力求解,204ms,9.1m class solution for index,num in enumerate ...
LeetCode刷題記錄
動態規劃和貪心演算法的異同點 class solution throw newruntimeexception 時間複雜度 o n 2 對於每個元素,我們試圖通過遍歷陣列的其餘部分來尋找它所對應的目標元素,這將耗費 o n o n 的時間。因此時間複雜度為 o n 2 需要一種方法,尋找符合要求的元...
leetcode刷題記錄
工作之餘刷刷題排解下寂寞 1 面試題66.構建乘積陣列 解題思路 題目要求可以簡化為求陣列中任意乙個元素左右兩邊所有元素的乘積。偷懶就用了乙個套路,練習了p c c python class solution def constructarr self,a list int list int 除法是...