参考这篇java版本,非常感谢
给定一个长为n的序列A1到An,求所有区间1<=L<=R<=N的极差之和,定义为【L,R】的最大值与最小值之差
输入:
5
4 1 8 2 5
输出:
60
思路:外层循环确定起始点以及最大最小值,内层循环用来遍历起点之后的元素,并判断最大最小值。
def computer(data):
count = 0
length = len(data)
for i in range(length-1):
if data[i]>=data[i+1]:
max_1 = data[i]
min_1 = data[i+1]
else:
max_1 = data[i+1]
min_1 = data[i]
for j in range(i+1,length):
if data[j]>=max_1:
max_1 = data[j]
count += (max_1-min_1)
elif data[j]<=min_1:
min_1 = data[j]
count += max_1-min_1
else:
count += max_1-min_1
return count
n = int(input())
num = [int(i) for i in input().split(' ')]
a = computer(num)
print(a)