分糖果题目问题咨询
一群孩子做游戏,现在请你根据游戏得分来发糖果,要求如下:
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];
}
{
sum += candy[i];
}