一个看起来较为基础的计算机算法问题,求大神解惑!(已解决,末尾给出参考答案)参数给定一组长度为length的随机正整数列表list,list中元素均小于或等于max;(注:length>2)给定正整数参数midshort、long,且满足0 条件从list中选取包括首尾元素在内的若干个元素组成一个新的列表list_cut,list_cut需要满足以下几个条件:list_cut中各个元素均需小于mid;list_cut中各个元素间在list中的索引值差为gap,且满足0若给定的参数无法选出list_cut,返回False; 若给定的参数可以选出多个list_cut,则返回所有list_cut中元素平均值最低的一个。示例一#输入list=[4,7,3,5,8,6,2,3,1,2]mid=5short,long=2,4#输出list_cut=[4,3,2,2]示例二#输入list=[4,7,6,5,8,6,2,3,1,2]mid=5short,long=2,4#输出list_cut=False参考答案多谢@SegmentWarrior大佬提供的思路与C++代码;下面给出我“翻译”并稍加改进后的python版的答案。deffind_list(nums:list,s:int,l:int,mid:int):"""nums:目标数组s:short最短长度l:long最长长度mid:限制大小"""#dp到当前位置的上一个最优解的indexn=len(nums)dp=[-1]*ndp[0]=0foriinrange(n-s):forjinrange(i+s,min(i+l+1,n)):ifnums[j]>=mid:continueelifdp[i]!=-1:dp[j]=iifdp[-1]==-1:returnFalseres=[]inx=n-1whileinx>0:res.append(nums[inx])inx=dp[inx]res.append(nums[0])returnres[::-1]
相关分类