信息学奥赛题库- 分糖果(candy) 【题目描述】 童年的我们,将和朋友分享美好的事物作为自己的快乐。这天,C小朋友得到了Plenty of candies,将要把这些糖果分给要好的朋友们。已知糖果从一个人传给另一个人需要1 秒的时间,同一个小朋友不会重复接受糖果。由于糖果足够多,如果某时刻某小朋友接受了糖果,他会将糖果...
这天,C 小朋友得到了 Plenty of candies,将要把这些糖果分给要好的朋友们。已知糖果从一个人传给另一个人需要 1 秒的时间,同一个小朋友不会重复接受糖果。由于糖果足够多,如果某时刻某小朋友接受了糖果,他会将糖果分成若干份,分给那些在他身旁且还没有得到糖果的小朋友们,而且自己会吃一些糖果。由于嘴馋,小...
}//从右往左遍历ratings数组,右边孩子与左边孩子相比for(inti = ratings.size() -2; i >=0; --i){//从倒数第二个下标开始if(ratings[i] > ratings[i +1]){ candyCount[i] = max(candyCount[i +1] +1, candyCount[i]); } }//统计糖果数intres =0;for(intc : candyCount) res += c;re...
There areNchildren standing in a line. Each child is assigned a rating value. You are giving candies to these children subjected to the following requirements: Each child must have at least one candy. Children with a higher rating get more candies than their neighbors. What is the minimum can...
[LeetCode] Candy (分糖果),时间复杂度O(n),空间复杂度为O(1),且只需遍历一次的实现 原题: There are N children standing in a line. Each child is assigned a rating value. You are giving candies to these children subjected to the following requirements: Each child must have at leastC语言 ...
典型的贪心算法题本身可以用贪心法来做,我们用candy[n]表示每个孩子的糖果数,遍历过程中,如果孩子i+1的rate大于孩子i的rate,那么当前最好的选择自然是:给孩子i+1的糖果数=给孩子i的糖果数+1如果孩子i+1的rate小于等于孩子i的rate咋整?这个时候就不大好办了,因为我们不知道当前最好的选择是给孩子i+1多少糖果...
输入输出样例输入 #1复制 7 16 23 输出 #1复制 6 输入 #2复制 10 14 18 输出 #2复制 8 输入 #3复制 见附件中的 candy/candy3.in。 输出 #3复制 见附件中的 candy/candy3.ans。 说明/提示 【样例解释 #1】 拿k = 20 块糖放入篮子里。
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()); ...
#include <numeric> #include <vector> class Solution { public: /** * pick candy * @param arr int整型vector the array * @return int整型 */ int candy(vector<int>& arr) { // write code here int n = arr.size(); vector<int> res(n,1); //从左到右遍历 for(int i = 1;i<n;++...
class Solution { public: int candy(vector<int>& arr) { // 记录每个小孩的糖果数,初始化为1 vector<int> num(arr.size(), 1); // 记录最终的糖果数 int res = 0; // 先从左向右遍历 for (int i = 1; i < arr.size(); i++) { // 如果右边得分大于左边,则右边糖果数是左边糖果数加1...