Lintcode 1230解题思路和c++代码
1230. 分餅干
題目:
假設你是一個了不起的家長,準備給你的孩子們一些餅干吃,但是你只能給每個孩子至多一塊餅干。每一塊餅干jj都有一個尺寸s_{j}s?j
;同時每一個孩子ii都有一個貪吃指數g_{i}g?i
,代表了能使他滿足的最小的餅干尺寸。如果s_{j} \geq g_{i}sj
≥g?i
?? ,那么就可以將餅干jj分給孩子ii使他得到滿足。你的目標是使最多的孩子得到滿足,輸出這個最大值。
樣例
樣例1:
輸入:[1,2,3], [1,1]
輸出:1
說明:你有三個孩子和兩塊餅干,三個孩子的貪吃指數分別是1,2,3
雖然你有兩塊餅干,但是因為它們的大小都為1,你只能滿足讓貪吃指數為1的孩子滿足,因此你應該輸出1
樣例2:
輸入:[1,2], [1,2,3]
輸出:2
說明:你有兩個孩子和三塊餅干,兩個孩子的貪吃指數分別是1和2
這三塊餅干的大小足以滿足所有的孩子,因此你應該輸出2
注意事項
貪吃指數總會是一個正整數
你不能將一塊以上的餅干分配給同一個孩子
解題思路:
1.總體的來說這道題并不是很難,但是我卻花了三十多分鐘才完整地做出來,主要是自己本身的問題;
問題①:沒有看清楚題意,一開始并沒有看到一個孩子只能吃一個,一位一個孩子能吃多個,導致了整體思路錯誤;
問題②:s對應的是j,g對應的是i,但是在判斷的時候我卻寫了
s[i]>=g[j],導致了結果一直過不了;
2.接下來講講解題思路:
主要是先把兩個數列排序,然后最小與最小的匹配,如果能夠匹配,那么兩個下標都往下走,如果不能,那么cookie的下標往下走,小孩子的小標不動。最后知道餅干分完或者小孩子沒有了跳出循環。
附上代碼:
int n=g.size(),m=s.size();sort(g.begin(),g.end());sort(s.begin(),s.end());int sum=0,i=0,j=0;while(i<n&&j<m){if(s[j]>=g[i]) {i++;} j++;}return i;總結
以上是生活随笔為你收集整理的Lintcode 1230解题思路和c++代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Lintcode 993 解题思路和c+
- 下一篇: InnoDB存储引擎对MVCC的实现