分糖果题目问题咨询

一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:
1. 每个孩子不管得分多少,起码分到一个糖果。
2. 任意两个相邻的孩子之间,得分较多的孩子必须拿多一些糖果。
3. 任意两个相邻的孩子之间的得分如果一样多,糖果数必须相同
给定一个数组arr代表得分数组,请返回最少需要多少糖果。
[要求]
时间复杂度为O(N)O(N)O(N), 空间复杂度为O(1)O(1)O(1)
输入描述:
第一行一个整数N表示数组大小
接下来一行N个整数表示数组内的元素
输出描述:
输出一个整数表示答案

对这个题目的答案存在异议:
#include<iostream>
#include<vector>
#include<algorithm>
#include <numeric>
 
using namespace std;
int main()
{
    int sum = 0;
    unsigned int N;
    scanf("%d", &N);
    vector<int>zq(N), candy(N);//每人分一个
    
    for(int i = 0; i < N; ++i)
    {
        candy.push_back(1);
    }
    
    for (int i = 0; i < N; ++i)
        scanf("%d", &zq[i]);
    
    for (int i = 1; i < N; ++i)//全员向左看
    {
        if (zq[i] > zq[i - 1])
            candy[i] = candy[i - 1] + 1;
    }
   
    for (int i = N - 1; i >= 0; --i)//全员向右看
    {
        if (zq[i] < zq[i - 1])
            candy[i - 1] = max(candy[i - 1], candy[i] + 1);
    }
    
    for (int i = 0; i < candy.size(); ++i)
    {
        sum += candy[i];
    }

    printf("%d", sum);
    return 0;
}
代码中的:i < candy.size() 为什么不能改成:i < N 这两者感觉没什么区别,求指点,谢谢!
for (int i = 0; i < candy.size(); ++i)
{
sum += candy[i];
}

#笔试题目#
全部评论

相关推荐

每晚夜里独自颤抖:把华北改为华南再试一试,应该就没啥问题了。改完可能都不用投,别人主动联系了。
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务