c++ - 有人可以解释我在解决这个问题的方法中做错了什么吗
问题描述
爱丽丝是一名幼儿园老师。她想给班上的孩子们一些糖果。所有的孩子排成一排,每个孩子都根据他或她在课堂上的表现打分。Alice 想给每个孩子至少 1 颗糖果。如果两个孩子坐在一起,那么评分较高的孩子必须得到更多的糖果。爱丽丝想尽量减少她必须购买的糖果总数。
例子
她给学生糖果的最小数量如下: . 她必须至少购买 10 颗糖果。
功能说明
在下面的编辑器中完成糖果功能。
candies 具有以下参数:
int n:班级中孩子的数量
int arr[n]: 每个学生的评分 Returns
int:爱丽丝必须购买的最少糖果数量 输入格式
第一行包含一个整数 ,n ,即 arr 的大小。
接下来的 n 行中的每一行都包含一个整数 arr[i],表示位置为 的学生的评分。
约束
1<n<10^5
1<arr[i]<10^5
样本输入 0
3
1
2
2
样本输出 0
4
解释 0
这里 1、2、2 是评级。请注意,当两个孩子的评分相同时,他们可以拥有不同数量的糖果。因此,最佳分布将是 1、2、1。
样本输入 1
10
2
4
2
6
1
7
8
9
2
1
样本输出 1
19
解释1
最佳分布将是 1 2 1 2 1 2 3 4 2 1。
样本输入 2
8
2
4
3
5
2
6
4
样本输出 2
12
解释2
最佳分布将是 1 2 1 2 1 2 1 2。
#include<iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
int arr[n],arr1[n];
for(int i=0; i<n;i++)
{
arr[i]=0;
arr1[i]=1;
}
for(int i=0; i<n;i++)
{
cin>>arr[i];
}
for(int i=1; i<n-1;i++)
{
if((arr[i]>arr[i-1]) && (arr[i]>arr[i+1]))
{
arr1[i]=(max(arr1[i-1],arr1[i+1])+1);
}
else if(arr[i]>arr[i-1])
{
arr1[i]=arr1[i-1]+1;
}
else if(arr[i]>arr[i+1])
{
arr1[i]=arr1[i+1]+1;
}
else
{
}
}
for(int i=1; i<n-1;i++)
{
if((arr[i]>arr[i-1]) && (arr[i]>arr[i+1]))
{
if((arr1[i]>arr1[i-1]) && (arr1[i]>arr1[i+1]))
{
}
else
{
arr1[i]=max(arr1[i-1],arr1[i+1])+1;
}
}
else if(arr[i]>arr[i-1])
{
if(arr1[i]>arr1[i-1])
{
}
else
{
arr1[i]=arr1[i-1]+1;
}
}
else if(arr[i]>arr[i+1])
{
if(arr1[i]>arr1[i+1])
{
}
else
{
arr1[i]=arr1[i+1]+1;
}
}
else
{
}
}
if(arr[n-1]>arr[n-2])
{
arr1[n-1]=arr1[n-2]+1;
}
else
{
}
if(arr[0]>arr[1])
{
arr1[0]=arr1[1]+1;
}
else {
}
int sum=0;
for(int i=0; i<n;i++)
{
sum+=arr1[i];
}
cout<<sum;
return 0;
}
我的方法:我想象孩子们的编号从 0 到 n-1。
arr[]
(这个数组存储了孩子的排名,数组的索引对应着孩子的号码)
arr1[]
(这个数组存储了糖果的分布,数组的索引对应着孩子的号码)
中的所有元素arr1[]
都初始化为1。
在第一个循环中,我使用了最大值-最小值的概念。
如果 in 的值arr[i]
是最大值,那么我存储max(arr1[i-1], arr1[i+1])
在arr1[i]
.
如果 in 的值在arr[i]
增加,即大于arr[i-1]
但小于arr[i+1]
然后 arr1[i]=arr1[i-1]+1;
执行。
如果 in 的值在arr[i]
减少,即大于arr[i+1]
但小于,arr[i-1]
则 arr1[i]=arr1[i=1]+1;
执行。
如果arr[i]
是最小值,则什么都不会发生,并且 in 的值arr1[i]
保持为 1。
在第二个循环中执行了类似的操作,但现在我检查值是否正确arr1[]
。
如果其中的数字arr[i]
是最大值,我检查存储的数字arr1[i]
是否是最大值,如果不是,那么我将值增加到正确的数量。
我也对增加、减少和最小值做同样的事情。
最后我打印输出。
请解释我的代码有什么问题。
解决方案
推荐阅读
- python - 如何修复“errLevel 17 IBM SPSS Statistics 后端未准备好”问题?
- excel - 为什么在 rng.Clear 之后没有发生格式化?
- javascript - 如何使用自定义组件解析主题标签和提及字符串
- sql-server - 我想根据一个字段“喜欢”另一个字段的内容加入 2 个表
- angular - 如何在所有 ngFor 元素中显示动画,因为它只发生在第一个元素中
- docker - VSCode Remote Container——如何在VSCode的容器实例中打开默认文件夹?
- powerbi - Power BI - 即使在过滤时也能在矩阵中保持可见的永久行
- reactjs - 如何使高图点重定向到 React 中具有值的另一个组件?
- google-chrome-extension - 如何在创建新选项卡后仅收听 tabs.onUpdated 并阻止 tabs.onActivated?
- python - PyAutoGui 找到按钮但仅在插入我的显示器时