leetcode-16-greedyAlgorithm

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

  

  

原文地址:https://www.cnblogs.com/pxy7896/p/6625899.html