From 235a42a8869737e6d67ac4e1c92d23bddfd899c1 Mon Sep 17 00:00:00 2001 From: begeekmyfriend Date: Sat, 23 Sep 2017 09:35:26 +0800 Subject: [PATCH] Candy Signed-off-by: begeekmyfriend --- 135_candy/Makefile | 2 ++ 135_candy/candy.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 135_candy/Makefile create mode 100644 135_candy/candy.c diff --git a/135_candy/Makefile b/135_candy/Makefile new file mode 100644 index 0000000..36411f5 --- /dev/null +++ b/135_candy/Makefile @@ -0,0 +1,2 @@ +all: + gcc -O2 -o test candy.c diff --git a/135_candy/candy.c b/135_candy/candy.c new file mode 100644 index 0000000..25bee29 --- /dev/null +++ b/135_candy/candy.c @@ -0,0 +1,40 @@ +#include +#include + +static int candy(int* ratings, int ratingsSize) +{ + if (ratingsSize == 0) return 0; + if (ratingsSize == 1) return 1; + + int i, *candies = malloc(ratingsSize * sizeof(int)); + candies[0] = 1; + + for (i = 1; i < ratingsSize; i++) { + if (ratings[i] > ratings[i - 1]) { + candies[i] = candies[i - 1] + 1; + } else { + candies[i] = 1; + } + } + + int sum = candies[ratingsSize - 1]; + for (i = ratingsSize - 2; i >= 0; i--) { + if (ratings[i] > ratings[i + 1] && candies[i] <= candies[i + 1]) { + candies[i] = candies[i + 1] + 1; + } + sum += candies[i]; + } + + return sum; +} + +int main(int argc, char **argv) +{ + int i, count = argc - 1; + int *nums = malloc(count * sizeof(int)); + for (i = 0; i < count; i++) { + nums[i] = atoi(argv[i + 1]); + } + printf("%d\n", candy(nums, count)); + return 0; +}