def findMaxAverage(self, nums: List[int], k: int) -> float:
sum_num=sum(nums[start:end+1])
avg_num=maxavg=sum_num/k
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+=1
return maxavg
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:
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算法小抄,突然对算法有了更深的理解。最初开始刷是因为考研需要,后来是今年第一份算法实习,虽然只是一个调参侠,一个月的时间做了三个小项目,但是能清晰认识到需要回头刷算法题来巩固自己的代码思维和能力。这是必要性。至于怎么开始实践,其实自己捣鼓了好几天,很幸运看到了这本书,作者认为算法其实就是遍历+访问数据结构,而数据结构是以数组和链表为基础的。从二叉树开始练习有助于最高效地抓住框架。