当前位置: 首页 > 后端技术 > Python

Leetcode周赛173-python答案

时间:2023-03-26 15:58:11 Python

5319.删除回文子序列题目注意是子序列不是子串!所以只有三个可能的答案:0:空字符串1:整个字符串是回文2:不是回文类解决方案:defremovePalindromeSub(self,s:str)->int:ifnots:return0defis_p(i,j):whileiList[int]:#restaurants[i]=[idi,ratingi,veganFriendlyi,pricei,distancei]ans=[]forrinrestaurants:ifveganFriendly==1andr[2]==0:continueifr[3]>maxPriceorr[4]>maxDistance:继续ans.append(r)ans.sort(key=lambdax:x[1]*1e5+x[0],reverse=True)返回[x[0]forxinans]5321。在阈值距离内最少邻居城市题目Floyd(弗洛伊德)算法类解法:deffindTheCity(self,n:int,edges:List[List[int]],distanceThreshold:int)->int:to={}foriinrange(n):to[i]={}foreinedges:ife[2]<=distanceThreshold:ife[1]into[e[0]]:to[e[0]][e[1]]=min(to[e[0]][e[1]],e[2])else:to[e[0]][e[1]]=e[2]如果e[0]在to[e[1]]:to[e[1]][e[0]]=min(to[e[1]][e[0]],e[2])否则:to[e[1]][e[0]]=e[2]flag=Truewhileflag:flag=Falseforcinto:tl=list(to[c].items())ford1,v1intl:ford2,v2into[d1].items():ifd2==c:continueifv1+v2<=distanceThreshold:ifd2into[c]:如果v2+v1midorlen(to[c])=i时才能解决状态转移,否则返回-1,所以需要的是i天的工作数是从i到n。在第i天做j份工作。可以是前k个工作在第i-1天完成,剩下的工作全部在最后一天完成(最后一天的工作量为:k到j的最大值),所以dp[i][j]=dp[i-1][j-1]+jobDifficulty[j-1]#初始化第i-1天做j-1个工作,最后一天工作做最后一个工作=jobDifficulty[j-1]#workisktoThemaximumvalueofjforkinrange(j-2,i-2,-1):work=max(jobDifficulty[k],work)ifdp[i-1][k]+workint:jc=len(jobDifficulty)ifd>jc:return-1dp=[[-1foriinrange(jc+1)]foriinrange(d+1)]dp[1][1]=jobDifficulty[0]foriinrange(2,jc+1):dp[1][i]=max(dp[1][i-1],jobDifficulty[i-1])foriinrange(2,d+1):forjinrange(i,jc+1):dp[i][j]=dp[i-1][j-1]+jobDifficulty[j-1]work=jobDifficulty[j-1]forkinrange(j-2,i-2,-1):work=max(jobDifficulty[k],work)ifdp[i-1][k]+work