赞
踩
n
个孩子站成一排。给你一个整数数组 ratings
表示每个孩子的评分。
你需要按照以下要求,给这些孩子分发糖果:
1
个糖果。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目 。
示例 1:
输入:ratings = [1,0,2] 输出:5 解释:你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。
示例 2:
输入:ratings = [1,2,2] 输出:4 解释:你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。 第三个孩子只得到 1 颗糖果,这满足题面中的两个条件。
-
- #include <stdio.h>
- #include <stdlib.h> // 引入标准库,用于内存分配和程序终止
-
- // 定义candy函数,接收一个整数数组和其大小
- int candy(int* ratings, int ratingsSize) {
- // 为结果数组分配内存,大小与ratingsSize相同
- int* candies = (int*)malloc(ratingsSize * sizeof(int));
-
- // 将结果数组的所有元素初始化为1,表示每个孩子开始时都得到1个糖果
- for (int i = 0; i < ratingsSize; i++) {
- candies[i] = 1;
- }
-
- // 第一遍遍历ratings数组,和右边比
- for (int i = 1; i < ratingsSize; i++) {
- if (ratings[i] > ratings[i - 1]) {
- candies[i] = candies[i - 1] + 1;
- }
- }
-
- // 第二遍遍历ratings数组,和左边比
- for (int i = ratingsSize - 2; i >= 0; i--) {
- if (ratings[i] > ratings[i + 1]) {
- candies[i] = candies[i] > candies[i + 1] + 1 ? candies[i] : candies[i + 1] + 1;
- }
- }
-
- // 计算总共需要多少糖果
- int sum = 0;
- for (int i = 0; i < ratingsSize; i++) {
- sum += candies[i];
- }
-
- // 打印每个孩子得到的糖果数量
- for (int i = 0; i < ratingsSize; i++) {
- printf("孩子 %d 得到了 %d 个糖果\n", i + 1, candies[i]);
- }
- free(candies);
- return sum;
- }
-
- int main() {
- int ratings[] = {95,90,98};
- int num = candy(ratings,3);
- printf("总共需要 %d 个糖果\n", num);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。