leetcode每日一题【Day1】——643. 子数组最大平均数 I

#列表遍历
def findMaxAverage(self, nums: List[int], k: int) -> float:
    #初始化目标
    sum_num=sum(nums[start:end+1])
    avg_num=maxavg=sum_num/k
    #初始化窗口:start是数字初始化,end是循环初始化
    start=0
    for end in range(k,len(nums)): 
    #更新目标
        sum_num=sum_num-nums[start]+nums[end]
        avg_num=sum_num/k
        maxavg=max(maxavg,avg_num)   
    #更新窗口:start是数字更新,end是循环更新
        start+=1
    return maxavg

#enumerate遍历
def findMaxAverage(self, nums: List[int], k: int) -> float:  
	sum_win=0
    max_sum=-math.inf
    left=0
    length=0
    for right,value in enumerate(nums):
        length+=1
        sum_win+=nums[right]
        if length==k:
        	#当窗口长度达到k时输出结果
            max_sum=max(max_sum,sum_win)
            sum_win-=nums[left]
            left+=1
            length-=1
    return max_sum/k

同题转化

1423. 可获得的最大点数

  • 题目:几张卡牌 排成一行,每张卡牌都有一个对应的点数。点数由整数数组 cardPoints给出。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k张卡牌。你的点数就是你拿到手中的所有卡牌的点数之和。给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。
  • 思路: 取两端得最大<>取中间得最小
def maxScore(self, cardPoints: List[int], k: int) -> int:
    sum_,min_sum=0,math.inf #维护
    left=0
    for right in range(len(cardPoints)):
        sum_+=cardPoints[right]
        if right-left+1==len(cardPoints)-k:
            min_sum=min(min_sum,sum_)
            sum_-=cardPoints[left]
            left+=1
    return sum(cardPoints) if k==len(cardPoints) else sum(cardPoints)-min_sum

  • 明日计划:3. 无重复字符的最长子串
  • 补充思考:2021.8.20
    今天开始看labuladong算法小抄,突然对算法有了更深的理解。最初开始刷是因为考研需要,后来是今年第一份算法实习,虽然只是一个调参侠,一个月的时间做了三个小项目,但是能清晰认识到需要回头刷算法题来巩固自己的代码思维和能力。这是必要性。至于怎么开始实践,其实自己捣鼓了好几天,很幸运看到了这本书,作者认为算法其实就是遍历+访问数据结构,而数据结构是以数组和链表为基础的。从二叉树开始练习有助于最高效地抓住框架。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值