我有一个n
号的列表。我想将列表划分为子列表,例如子列表由连续递增的数字或连续递减的数字组成。然后取每个子列表的最小值与其长度的乘积。最后求出这个乘积的和
输入:
l = [1,2,6,4,2,3,1,8,9,7]
输出:
32
详情:
[1,2,6],[6,4,2],[2,3],[3,1],[1,8,9],[9,7]
(1*3) +(2*3) + (2*2)+(1*2)+(1*3)+ (7*2) = 32
迄今为止的代码:
n = 10
l = [1,2,6,4,2,3,1,8,9,7]
tot = 0
count = 0
inc=dec=False
min_val = 1001 # max value in list won't exceed 1000
for idx, e in enumerate(l):
if idx+1<=n:
if e > l[idx+1]:
count+=1
if min_val > l[idx+1]:
min_val=l[idx+1]
inc=True
dec=False
elif e < l[idx+1]:
count+=1
if min_val > e:
min_val=e
dec=True
# if not inc
inc=False
*注意:列表中没有两个相邻值相等
更新-1:
itemp = [1001]
dtemp = [1001]
result=0
for e in l:
# if not itemp or not dtemp:
# itemp.append(e)
# dtemp.append(e)
if e > itemp[-1]:
if not dtemp:
itemp.append(e)
else:
result+=(min(dtemp)*(len(dtemp)-1))
dtemp=[1001]
itemp.append(e)
elif e < dtemp[-1]:
dtemp.append(e)
if not itemp:
dtemp.append(e)
else:
result+=(min(itemp)*(len(itemp)-1))
itemp=[1001]
dtemp.append(e)
print(result)
这将0
作为输出。有人能帮忙吗
您可以使用zip识别断裂位置(峰和底),以检测3个元素的每个序列之间的增加/减少值的变化。然后使用这些中断来形成子列表,并在理解中应用计算
相关问题 更多 >
编程相关推荐