Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions lab7_KlemyatsionokPolina_j3113
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#include <vector>
#include <algorithm>

class Solution {
public:
int candy(std::vector<int>& ratings) {
int n = ratings.size(); // получаем количество детей
if (n == 0) return 0; // если детей нет, возвращаем 0

std::vector<int> candies(n, 1); // создаем массив candies размером n, заполняем его единицами
// (каждый ребенок должен получить хотя бы одну конфету)

// Левый проход (слева направо): раздаем конфеты тем, у кого рейтинг выше, чем у левого соседа
for (int i = 1; i < n; i++) {
if (ratings[i] > ratings[i - 1]) { // если текущий ребенок имеет рейтинг выше предыдущего
candies[i] = candies[i - 1] + 1; // дем ему на 1 конфету больше
}
}

// Правый проход (справа налево): раздаем конфеты тем, у кого рейтинг выше, чем у правого соседа
for (int i = n - 2; i >= 0; i--) { // идем с предпоследнего элемента к первому
if (ratings[i] > ratings[i + 1]) { // если текущий ребенок имеет рейтинг выше правого соседа
candies[i] = std::max(candies[i], candies[i + 1] + 1);
// берем максимум из текущего значения (чтобы сохранить левый проход) и значения, которое мы должны выдать по правому проходу
}
}

// Подсчет общего количества конфет
int totalCandies = 0;
for (int candy : candies) { // проходим по массиву candies и суммируем значения
totalCandies += candy;
}

return totalCandies; // возвращаем итоговое количество конфет
}
};