• [LeetCode] Candy


    There are N children standing in a line. Each child is assigned a rating value. 

    You are giving candies to these children subjected to the following requirements:

    • Each child must have at least one candy.
    • Children with a higher rating get more candies than their neighbors.

    What is the minimum candies you must give?

    贪心算法:

    贪心算法分阶段工作,在每个阶段,可以认为所做的决定是最好的,而不考虑将来的后果。意味着选择的是局部最优化。

    这种“眼下能拿到的就拿”的策略即是这类算法名字的来源。当算法终止时,将得到全局最优。

    class Solution {
    public:
        int candy(vector<int> &ratings) {
            vector<int>::size_type number = ratings.size(); 
            vector<int> candies(number,1);
            int sum = 0;
            for(vector<int>::size_type st=0;st<number-1;st++)//从前往后依次比较相邻两位
            {
               if(ratings[st+1]>ratings[st])
                   candies[st+1] = candies[st]+1;
            }
            for(vector<int>::size_type stRev=number-1;stRev>0;stRev--)//从后往前依次比较相邻两位
            {
               if(ratings[stRev]<ratings[stRev-1] && candies[stRev-1]<=candies[stRev])//注意此处条件比上一个从前往后的条件更严谨,如果和上面条件一样贪心算法还是局部最优
                   candies[stRev-1]=candies[stRev]+1;
            }
            for(vector<int>::size_type st=0;st<number;st++)
                sum += candies[st];
            return sum;
        }
    };

    另外参考Felix的博客, http://www.cnblogs.com/felixfang/p/3620086.html,第二种算法,不需要上面贪心算法的O(n)时间。

  • 相关阅读:
    jetnuke v1.2安装
    Java Gaming Resources
    @MyEclipse启动Tomcat时Console不显示(已解决+配图)
    在JXSE中,DHT=SRDI
    LINQ 学习笔记9 Kevin
    LINQ 学习笔记6 Kevin
    C# 中自定义事件 Kevin
    LINQ 学习笔记7 Kevin
    C#调用浏览器(默认和非默认浏览器) Kevin
    Section1 Agile Development Kevin
  • 原文地址:https://www.cnblogs.com/Xylophone/p/3780236.html
Copyright © 2020-2023  润新知