zoukankan      html  css  js  c++  java
  • 美的笔试--分糖果

    有N个小朋友站在一排,每个小朋友都有一个评分
    你现在要按以下的规则给孩子们分糖果:
    • 每个小朋友至少要分得一颗糖果
    • 分数高的小朋友要他比旁边得分低的小朋友分得的糖果多
    你最少要分发多少颗糖果?
    示例1

    输入

    [1,2,2]

    输出

    4

    思路:

    从左到右一次遍历,从右到左一次遍历,就ok了。

    我的错误的思路:从左到右,看是升序还降序,然后话要考虑等于号,用了5个变量来记录遍历结果,很麻烦而且没写出来。

    总结:多总结思路,常规思路往往是错的;需要考虑很多细节的方法也往往是错的。

    class Solution {
    public:
        int candy(vector<int> &ratings) {
            //题意:N个孩子站成一排,每个孩子分配一个分值。给这些孩子派发糖果,满足如下要求:
            //每个孩子至少一个
            //分值更高的孩子比他的相邻位的孩子获得更多的糖果
            //求至少分发多少糖果?
            int len=ratings.size();
            if(len==1) return 1;
            
            int sum=0;
            vector<int> v(len,1);//初始将每个孩子的糖果数都设为1
            
            //从左向右扫描,保证一个方向上分数更大的糖果更多
            for(int i=1;i<len;i++){
                if(ratings[i] > ratings[i-1])
                    v[i]=v[i-1]+1;
            }
            //从右向左扫描,保证另一个方向上分数更大的糖果更多
            for(int i=len-2;i>=0;i--){
                if(ratings[i] > ratings[i+1] && v[i] <= v[i+1])
                    v[i]=v[i+1]+1;
            }
            
            for(int i=0;i<len;i++){
                sum+=v[i];
            }
            return sum;
        }
    };
    心之所愿,永不相忘
  • 相关阅读:
    linux学习之路第八天(linux文件权限详解)
    linux学习之路第八天(组管理和权限管理)
    python 多线程示例
    python scapy 网卡发包
    python scapy 网卡抓包
    python 返回数组的索引
    MPLS 网络中的 MTU
    mysql 导入导出sql文件
    linux 修改MTU值
    ovs 源mac, 目的src 互换
  • 原文地址:https://www.cnblogs.com/zgll/p/15320207.html
Copyright © 2011-2022 走看看