455. Assign Cookies
解題思路:
先将兩個數組按升序排序,然後從後往前周遊,當s[j] >= g[i]的時候,就把s[j]分給g[i],i,j都向前移動,count+1;否則向前移動i,直到可以找到這樣的i。
還是很典型的貪心算法啊。
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(), g.end());
sort(s.begin(), s.end());
int i = g.size() - 1;
int j = s.size() - 1;
int count = 0;
while (i >= 0 && j >= 0) {
if (g[i] > s[j])
i --;
else {
i --;
j --;
count ++;
}
}
return count;
}
122. Best Time to Buy and Sell Stock II
解題思路:
這道題的話,隻要考慮臨近兩天的情況就好了。如果第二天賣的價格高于第一天買入的價格,收益為正,就可以進行。另外,當prices為空或者隻有一個
元素時,顯然不能買入,收益應該保持0。
int maxProfit(vector<int>& prices) {
if (prices.size() <= 1)
return 0;
int i;
int sum = 0;
for (i = 0; i < prices.size() - 1; i++ ) {
sum += max((prices[i+1] - prices[i]), 0);
}
return sum;
}
與上面相關的是這道題:
121. Best Time to Buy and Sell Stock
解題思路:
周遊一遍prices,用Min表示目前找到的最小值,用Max記錄最大收益。找Max時,如果目前prices[i]-Min < Max,那麼Max就不變。
int maxProfit(vector<int>& prices) {
if (prices.size() <= 1)
return 0;
int Min = prices[0];
int Max = 0;
for (int i = 0; i < prices.size(); i++) {
Min = min(Min, prices[i]);
Max = max(Max, prices[i] - Min);
}
return Max;
}