曾格的github

美的笔试--分糖果

有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;
    }
};
复制代码

 

posted @   曾格  阅读(85)  评论(0编辑  收藏  举报
编辑推荐:
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
· 程序员常用高效实用工具推荐,办公效率提升利器!
Live2D
欢迎阅读『美的笔试--分糖果』
点击右上角即可分享
微信分享提示