(Простая задача LeetCode)
Есть n
детей с конфетами. Вам дан массив целых чисел candies
, где каждое candies[i]
представляет количество конфет, которые есть у ith
ребенка, и целое число extraCandies
, обозначающее количество дополнительных конфет, которые у вас есть.
Возвращает логический массивresult
длиныn
, гдеresult[i]
равноtrue
, если после задания ith
раздать всехextraCandies
, у них будет наибольшее количество конфет среди всех детей, илиfalse
иначе.
Обратите внимание, что несколько детей могут получить наибольшее количество конфет.
Пример 1:
Input: candies = [2,3,5,1,3], extraCandies = 3 Output: [true,true,true,false,true] Explanation: If you give all extraCandies to: - Kid 1, they will have 2 + 3 = 5 candies, which is the greatest among the kids. - Kid 2, they will have 3 + 3 = 6 candies, which is the greatest among the kids. - Kid 3, they will have 5 + 3 = 8 candies, which is the greatest among the kids. - Kid 4, they will have 1 + 3 = 4 candies, which is not the greatest among the kids. - Kid 5, they will have 3 + 3 = 6 candies, which is the greatest among the kids.
Пример 2:
Input: candies = [4,2,1,1,2], extraCandies = 1 Output: [true,false,false,false,false] Explanation: There is only 1 extra candy. Kid 1 will always have the greatest number of candies, even if a different kid is given the extra candy.
Пример 3:
Input: candies = [12,1,12], extraCandies = 10 Output: [true,false,true]
Ограничения:
n == candies.length
2 <= n <= 100
1 <= candies[i] <= 100
1 <= extraCandies <= 50
Подход
Итак, давайте поймем, каким должен быть наш подход? Любые идеи? Ну, давайте сначала разберемся в вопросе.
Итак, сначала нам дано количество конфет, которое изначально есть у детей, поэтому конфеты = [1,2,3], предположим, что это так.
Теперь найдите максимальное количество конфет в заданном массиве конфет, равное 3. Теперь
конфеты[0]+extraCandies = 1 + 3 = 4 › 3
конфеты[1]+дополнительныеКонфеты = 2 + 3 = 5 ›3
конфеты[2]+дополнительныеКонфеты = 3 + 3 = 6 ›3
Итак, поскольку мы видим, что все дети, получившие эти дополнительные конфеты, будут иметь число, превышающее максимальное количество конфет в данном массиве конфет. И это необходимое решение.
Код выглядит следующим образом:
class Solution { public: vector<bool> kidsWithCandies(vector<int>& candies, int extraCandies) { vector<bool>ans; int maxm_can = INT_MIN; for(int i=0;i<candies.size();i++) { maxm_can = max(maxm_can,candies[i]); } for(int i=0;i<candies.size();i++) { if((candies[i]+extraCandies)>=maxm_can) ans.push_back(true); else ans.push_back(false); } return ans; } };
Временная сложность здесь равна O(n)+O(n) = O(n)один раз для обхода и нахождения максимума, а другой – для сравнения того, что значение больше, чем максимальное значение конфеты или нет.
Сложность пространства равна O(n), потому что я использую его для хранения логических значений.