• 美的笔试--分糖果


    有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;
        }
    };
    心之所愿,永不相忘
  • 相关阅读:
    axios取消请求
    echarts常用图表配置
    Vue指令限制输入框输入整数小数
    小程序商品飞入购物车组件
    webpack按测试和生产环境进行编译
    地图画线添加标签
    vue-element-admin 动态侧边栏
    html2canvas 和浏览器打印
    echarts 指定某段曲线颜色
    列出表结构
  • 原文地址:https://www.cnblogs.com/zgll/p/15320207.html
Copyright © 2020-2023  润新知