每日一題,防止癡呆 = =
大家兒童節快樂!!! 程序員啥節都過
一、題目大意
給你一個數組 candies 和一個整數 extraCandies ,其中 candies[i] 代表第 i 個孩子擁有的糖果數目。
對每一個孩子,檢查是否存在一種方案,將額外的 extraCandies 個糖果分配給孩子們之後,此孩子有 最多 的糖果。注意,允許有多個孩子同時擁有 最多 的糖果數目。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/kids-with-the-greatest-number-of-candies
二、題目思路以及AC代碼
沒想到兒童節在力扣還能收穫驚喜 ^_^
這評論也是夠快樂的。
思路
這題就是福利題了,官解裏給了枚舉方法,但我覺得這題怎麼也不會有人真的上來就想O(n^2)的方法吧,抽象一下題目,就是說給定一個數組,如果第i個數在加入extraCandies個糖果後可以成爲最大值,那麼結果數組中其就爲true,否則爲false。
那麼這樣一看思路就很簡單了,先用O(n)求取一下數組最大值,然後再遍歷數組,如果該元素加上extraCandies大於等於最大值,則結果數組爲true,否則爲false,這一步的複雜度也是O(n)。
AC代碼
class Solution {
public:
vector<bool> kidsWithCandies(vector<int>& candies, int extraCandies) {
vector<bool> res;
int c_size = candies.size();
if (!c_size) return res;
int c_max = candies[0];
for (int i=1;i<c_size;i++) {
c_max = max(c_max, candies[i]);
}
for (int i=0;i<c_size;i++) {
if (candies[i] + extraCandies >= c_max) res.push_back(true);
else res.push_back(false);
}
return res;
}
};
如果有問題,歡迎大家指正!!!