回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个<code>n</code>号的列表。我想将列表划分为子列表,例如子列表由连续递增的数字或连续递减的数字组成。然后取每个子列表的最小值与其长度的乘积。最后求出这个乘积的和</p>
<p>输入:</p>
<pre><code>l = [1,2,6,4,2,3,1,8,9,7]
</code></pre>
<p>输出:</p>
<pre><code>32
</code></pre>
<p>详情:</p>
<pre><code>[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
</code></pre>
<p>迄今为止的代码:</p>
<pre><code>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
</code></pre>
<p>*<strong>注意:</strong>列表中没有两个相邻值相等</p>
<p><strong>更新-1:</strong></p>
<pre><code>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)
</code></pre>
<p>这将<code>0</code>作为输出。有人能帮忙吗</p>