如题
给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。
对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。
https://leetcode-cn.com/problems/kids-with-the-greatest-number-of-candies/submissions/
解题(分析题目)
class Solution:
"""
思路:拆解题目:本质是找到列表里比最大值小的数,加上一个数,其值能否大于等于原有最大值,有则返回true
思路二:逆向思维一下,最大值减额外值,只要比这个值还小就是false,避免了每次比较都要计算一下
思路三:简化下过程,会不会更快
思路三:不用max,单纯用比较,会不会更快,
思路四:能先排序,再比较么,索引会变,捆绑索引,过于复杂,无效
思路五:还要更快怎么办?能不能减少比较的次数,通过max里的key来直接生成呢,暂时不行(对原理不够了解)
"""
思路一.暴力解法
class Solution:
def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
#空列表放结果
lis = []
#遍历传入列表
for n in candies:
#用比较运算符,返回false 和true
lis.append(n + extraCandies >= max(candies) )
return lis
思路二.去除每次相减的过程
class Solution:
def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
lis = []
middle = max(candies) - extraCandies
for n in candies:
lis.append(n >= middle)
return lis
思路三.简化过程
class Solution:
def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
return [n>= max(candies) - extraCandies for n in candies]
思路四.不用max函数,直接求
class Solution:
def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
count = 0
#代替max函数
for n in candies:
if n > count:
count = n
mid = count - extraCandies
return [ n >= mid for n in candies]