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; }