题1
体会
01背包啊。01背包啊!怎么能一直往回溯上想!还是对动态规划太不熟悉了!这不就是01背包吗?还要别人提示才知道。
我的代码
class Solution:
def numberOfWays(self, n: int, x: int) -> int:
maxi = int(pow(n,1/x))+2
dp = [0]*(n+1)
dp[0] = 1
for i in range(1,maxi):
for j in range(n,0,-1):
if j >= pow(i,x):
dp[j] += dp[j-pow(i,x)]
return dp[n] % (pow(10,9)+7)
题2
我的代码
哈希,用双指针应该也可以。
class Solution:
def sortVowels(self, s: str) -> str:
t = list(s)
temp = ['a','e','i','o','u','A','E','I','O','U']
index = []
n = len(s)
haxi = [0]*58
for i in range(n):
if s[i] in temp:
index.append(i)
haxi[ord(s[i])-ord('A')]+=1
else:
t[i] = s[i]
index.sort()
count = 0
for i in range(58):
if haxi[i]!=0 :
while haxi[i] :
t[index[count]] = chr(i + ord('A'))
count += 1
haxi[i]-=1
return ''.join(t)
题3
体会
也是动态规划啊!怎么能又想回溯!这道题如果两层遍历会超时,要保存前面遍历过的,当前点为奇数的最大值,和当前点为偶数的最大值。
这个地方比较绕,可能想不明白,这里的奇偶性,指的是,当前遍历到的 nums[i] ,最大值指的是,下标在当前点的,得分总和的最大值。
因为当前位置的最大价值一定是由前面某个位置过来的,前面的那个位置的数,不是奇数就是偶数,那么我记录奇数的最大价值,和偶数的最大价值,就可以推出,当前点的最大价值了!文章来源:https://www.toymoban.com/news/detail-605011.html
因为,当节点从 nums[j] 移动到 nums[i] 时,所获得的得分跟 nums[i] 有关,而和nums[j]没有直接关系,nums[j]的值,已经包含在最大价值中了。文章来源地址https://www.toymoban.com/news/detail-605011.html
我的代码
class Solution:
def maxScore(self, nums: List[int], x: int) -> int:
n = len(nums)
dp = [-inf]*n
dp[0] = nums[0]
maxi = nums[0]
maxji = -inf
maxou = -inf
if nums[0] % 2 == 0:
maxou = nums[0]
else :
maxji = nums[0]
for i in range(1,n):
if nums[i] % 2 == 0 :
dp[i] = max(maxou+nums[i],maxji+nums[i]-x)
maxou = max(maxou,dp[i])
else :
dp[i] = max(maxou+nums[i]-x,maxji+nums[i])
maxji = max(maxji,dp[i])
maxi = max(maxi,dp[i])
return maxi
到了这里,关于Leetcode周赛 | 2023-7-23的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!