题目:
逆序对距离之和
牛客评论里的大佬甲代码:
n = int(input())
#输入排列长度n
num = list(map(int, input().split()))
#输入第二行的n个数字,用空格隔开
#split(对字符串操作)默认以空格来分割
#分割好的序列input().split()全部进行函数int操作,str型都变为int型
#由于python3.x返回迭代器,所以加list()函数将迭代器转化为列表
ans = 0
acc = 0
for i, x in enumerate(num):
m = i + 1
acc += x
#acc=acc+x
g = (m + 1) * m / 2
ans += (acc - g)
#ans=ans+(acc-g)
print(int(ans))
解析:
enumerate(sequence, [start=0])
enumerate() 函数
用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for循环当中。
sequence – 一个序列、迭代器或其他支持迭代对象。
start – 下标起始位置。
for i, x in enumerate(num):
中i为下标,x为数据值
迭代循环
当此时是第i个元素时
acc为从0到i的元素值总和
g为从0到i+1的下标总和
- 大佬意思是acc-g是新增逆序对距离(为啥啊)
ans为之前算得的逆序对的距离
“输入的数组是一个 1 到 n 的排列,这会导致逆序对距离之和等于逆序对元素差(大的减小的)的和。”
牛客评论里的大佬乙代码:
nsum = 0
a = int(input())
str = list(map(int,input().split()))[:a]
for i in range(len(str)):
for n in str[:i+1]:
if(str[i]>=n):
continue
nsum += n -str[i]
print(nsum)