C++算法:分发糖果

简介: C++算法:分发糖果

题目

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

2023年5月

class Solution {
public:
int candy(vector& ratings) {
m_c = ratings.size();
std::vector<pair<int, int>> vValueIndexs;
for (int i = 0; i < m_c; i++)
{
vValueIndexs.emplace_back(ratings[i], i);
}
sort(vValueIndexs.begin(), vValueIndexs.end());
vector vRet(m_c);
for (int j = 0; j < vValueIndexs.size(); j++)
{
const int iCur = vValueIndexs[j].first;
const int i = vValueIndexs[j].second;
int num = 1;
if ((i + 1 < m_c) && (ratings[i + 1] < iCur))
{
num = max(num, vRet[i + 1]+1);
}
if ((i > 0) && (ratings[i - 1] < iCur))
{
num = max(num, vRet[i - 1]+1);
}
vRet[i] = num;
}
return std::accumulate(vRet.begin(), vRet.end(), 0);
}
int m_c;
};

2023年8月

class Solution {
public:
int candy(vector& ratings) {
m_c = ratings.size();
std::vector<pair<int, int>> vValueIndexs;
for (int i = 0; i < m_c; i++)
{
vValueIndexs.emplace_back(ratings[i], i);
}
sort(vValueIndexs.begin(), vValueIndexs.end());
vector vRet(m_c);
for (int j = 0; j < vValueIndexs.size(); j++)
{
const int iCur = vValueIndexs[j].first;
const int i = vValueIndexs[j].second;
int num = 1;
if ((i + 1 < m_c) && (ratings[i + 1] < iCur))
{
num = max(num, vRet[i + 1]+1);
}
if ((i > 0) && (ratings[i - 1] < iCur))
{
num = max(num, vRet[i - 1]+1);
}
vRet[i] = num;
}
return std::accumulate(vRet.begin(), vRet.end(), 0);
}
int m_c;
};

其它

视频课程

如果你觉得复杂,想从简单的算法开始,可以学习我的视频课程。

https://edu.csdn.net/course/detail/38771

我的其它课程

[https://edu.csdn.net/lecturer/6176]

(https://edu.csdn.net/lecturer/6176)

测试环境

win7 VS2019 C++17

相关下载

算法精讲《闻缺陷则喜算法册》doc版

https://download.csdn.net/download/he_zhidan/88348653


相关文章
|
15天前
|
算法 C++
算法笔记:递归(c++实现)
算法笔记:递归(c++实现)
|
2天前
|
算法 数据中心 C++
基于C++雪花算法工具类Snowflake -来自chatGPT
基于C++雪花算法工具类Snowflake -来自chatGPT
8 1
|
7天前
|
算法 数据处理 C++
C++一分钟之-迭代器与算法
【6月更文挑战第21天】C++ STL的迭代器统一了容器元素访问,分为多种类型,如输入、输出、前向、双向和随机访问。迭代器使用时需留意失效和类型匹配。STL算法如查找、排序、复制要求特定类型的迭代器,注意容器兼容性和返回值处理。适配器和算法组合增强灵活性,但过度使用可能降低代码可读性。掌握迭代器和算法能提升编程效率和代码质量。
23 3
|
12天前
|
算法 前端开发 Linux
【常用技巧】C++ STL容器操作:6种常用场景算法
STL在Linux C++中使用的非常普遍,掌握并合适的使用各种容器至关重要!
38 10
|
14天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
14天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
14天前
|
存储 算法 C++
【数据结构与算法】:带你手搓顺序表(C/C++篇)
【数据结构与算法】:带你手搓顺序表(C/C++篇)
|
18天前
|
存储 算法 数据可视化
如何使用多种算法解决LeetCode第135题——分发糖果问题
如何使用多种算法解决LeetCode第135题——分发糖果问题
|
2天前
|
算法 搜索推荐 C++
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
C++之STL常用算法(遍历、查找、排序、拷贝、替换、算数生成、集合)
12 0
|
4天前
|
算法 前端开发 安全
C++算法模板
C++算法模板
6 0