135. 分发糖果

server/2024/9/25 21:29:13/

n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。

你需要按照以下要求,给这些孩子分发糖果:

  • 每个孩子至少分配到 1 个糖果。
  • 相邻两个孩子评分更高的孩子会获得更多的糖果。

请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。

示例 1:

输入:ratings = [1,0,2]
输出:5
解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。

示例 2:

输入:ratings = [1,2,2]
输出:4
解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。

提示:

  • n == ratings.length
  • 1 <= n <= 2 * 104
  • 0 <= ratings[i] <= 2 * 104

 

int candy(vector<int>& ratings) {

vector<int>sortVec = ratings;

    set<int>tmpSet;

    for (auto it : sortVec)

    {

        tmpSet.insert(it);

    }

    sortVec.clear();

    for (auto it : tmpSet)

    {

        sortVec.push_back(it);

    }

    sort(sortVec.begin(), sortVec.end());

    map<int, vector<int>>mapIndex;

    for (int i = 0; i<ratings.size(); i++)

    {

        mapIndex[ratings[i]].push_back(i);

    }

    vector<int>ret(ratings.size(), -1);

    //从评分低开始

    for (int i = 0; i<sortVec.size(); i++)

    {

        vector<int>indexVec = mapIndex[sortVec[i]];

        for (int j = 0; j<indexVec.size(); j++)

        {

            //已计算过

            if (ret[indexVec[j]] != -1)

            {



 

                //处理左右两边

                int tmp = 1;

                //判断左边

                if (indexVec[j] - 1 >= 0 )

                {

                    //未计算过

                    if (ret[indexVec[j] - 1] == -1)

                    {

                        ///和前一个不相等

                        if (ratings[indexVec[j] - 1] != ratings[indexVec[j]])

                        {

                            tmp = ret[indexVec[j]] + 1;

                        }

                        ret[indexVec[j] - 1] = tmp;

                        tmp = 1;

                    }  

                }

                //判断右边

                if (indexVec[j] + 1 < ratings.size())

                {

                    //已计算过

                    if (ret[indexVec[j] + 1] != -1)

                    {

                        continue;

                    }

                    ///和前一个不相等

                    if (ratings[indexVec[j] + 1] != ratings[indexVec[j]])

                    {

                        tmp = ret[indexVec[j]] + 1;

                    }

                    ret[indexVec[j] + 1] = tmp;

                }

                continue;

            }

            //处理左右两边

            int tmp = 1;

            ret[indexVec[j]] = tmp;

            //判断左边

            if (indexVec[j] - 1 >= 0)

            {

                //已计算过

                if (ret[indexVec[j] - 1] != -1)

                {

                    continue;

                }

                ///和前一个不相等

                if (ratings[indexVec[j] - 1] != ratings[indexVec[j]])

                {

                    tmp = ret[indexVec[j]] + 1;

                }

   

                ret[indexVec[j] - 1] = tmp;

                tmp = 1;

            }

            //判断右边

            if (indexVec[j] + 1 < ratings.size() )

            {

                //已计算过

                if (ret[indexVec[j] + 1] != -1)

                {

                    continue;

                }

                ///和前一个不相等

                if (ratings[indexVec[j] + 1] != ratings[indexVec[j]])

                {

                    tmp = ret[indexVec[j]] + 1;

                }

                ret[indexVec[j] + 1] = tmp;

            }

        }

    }

    for (int i = 0; i < ret.size(); i++)

    {

        if (i - 1 > 0 && ratings[i] > ratings[i - 1] && ret[i] <= ret[i - 1])

        {

            ret[i] = ret[i - 1] + 1;

        }

        if (i +1 < ratings.size() && ratings[i] > ratings[i + 1] && ret[i] <= ret[i + 1])

        {

            ret[i] = ret[i + 1] + 1;

        }

    }

    int socre = 0;

    for (auto it : ret)

    {

        socre += it;

    }

    return socre;

    }


http://www.ppmy.cn/server/17408.html

相关文章

使用新版ESLint,搭配Prettier使用的配置方式

概述 ESLint重大更新(9.0.0版本)后,将不再支持非扁平化配置文件,并且移除了与Prettier冲突的规则,也就是说与Prettier搭配使用,不再需要使用插件“eslint-config-prettier”来处理冲突问题。 注:使用新版的前提条件是Node.js版本必须是18.18.0、20.9.0,或者是>=21.1…

【树莓派4B】如何点亮树莓派的LED灯

在之前一系列文章中&#xff0c;使用python、行人入侵检测&#xff0c;确没有使用树莓派的硬件。控制引脚进行输出&#xff1a; 如何写python点亮led灯闪烁&#xff0c;我灯接在gpio13,GPIO19,gpio26。我都想闪烁。 你可以使用Python的GPIO库来控制树莓派上的LED灯。首先&…

前端入门:HTML(列表和边框案例)

1.列表知识&#xff1a; list-style-position有两个值&#xff0c;分别是inside&#xff0c;outside&#xff0c;分别表示在标签里面和在标签外面。 2.案例&#xff1a; 源代码&#xff1a; html: <body> <div class"bigBox"> <div>在线解答问题…

前端Vue2项目搭建过程

一.准备工作 1.可以上网找一些设计稿寻找思路开发页面界面布局 站酷设计网站&#xff1a;站酷ZCOOL-设计师互动平台-打开站酷&#xff0c;发现更好的设计&#xff01; 花瓣网&#xff1a;花瓣网 - 陪你做生活的设计师&#xff08;创意灵感天堂&#xff0c;搜索、发现设计灵感…

达芬奇调色:色彩理论入门

写在前面 整理一些达芬奇调色的笔记博文内容涉及&#xff1a; 一级调色是什么&#xff0c;以及 调色素材格式 log&#xff0c;raw&#xff0c;rec709 简单认知理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#…

linux下 Mysql8.0 离线安装

环境&#xff1a;centos7.9 MysqlL8.0.36安装包 链接&#xff1a;https://pan.baidu.com/s/1bKwHr05z8Ye82dT9tntdUA 提取码&#xff1a;3a5z 参考Centos安装MYSQL8(离线可用) 文章目录 1、解压安装2、配置启动2.1 修改配置文件2.2 mysql 启动 3、mysql 测试 1、解压安装 #…

本地生活服务平台有哪些?哪个靠谱?

随着多家互联网大厂的本地生活服务布局日益展开&#xff0c;不少人都看到了其中的巨大市场缺口和广阔前景&#xff0c;想要入驻本地生活服务平台&#xff0c;瓜分这块巨大的蛋糕。而在当下这个选择大于努力的时代&#xff0c;能否分到蛋糕以及分到多少蛋糕的关键&#xff0c;就…

平衡小车的控制算法--结合自动控制原理学习

单纯的去看自控原理&#xff0c;很多概念有点抽象&#xff0c;最好找些应用去理解相关的概念&#xff0c;就找了实验室的一个平衡小车作为应用&#xff0c;不过主要根据小车去跑matlab去验证一些控制算法。结合台湾国立交通大学林沛群的自控线上课的总结 一、自控原理重要概念 …