强迫症刷leetcode(简单级)系列:1431.拥有最多糖果的孩子

如题

给你一个数组 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]
 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值