解题思路:
关键在于找到不相同的数据的【转折点】并将该数据和下标存进列表,比如:
0 0 5 5 10 10
0和5转折点在下标 1 处 并将数据 0 存储进列表
假设列表N存放数据,列表L存放下标,那么最终两个列表的内容是:
N = [0,5,10]
L = [1,3,5]
中间还有一些细节比如:
①如何处理数组越界
②最后一位数据其实无论和倒数第二位数据是否相等都得加入列表
③最大值就是看列表 L[I+1]-L[i] 区间内有多少个数据 N[i];最小值直接将列表N求和即可
满分题解:
n = int(input())
B = list(map(int, input().split()))
N = []
L = [0]
for i in range(n):
if i != n-1 and B[i] != B[i+1]:
N.append(B[i])
L.append(i+1)
if i == n-1:
N.append(B[i])
L.append(i+1)
max = 0
min = 0
for i in range(len(L)-1):
max += (L[i+1]-L[i]) * N[i]
min = sum(N)
print(max)
print(min)