笔试刷题(1)——逆序对距离之和

题目:
逆序对距离之和
在这里插入图片描述
牛客评论里的大佬甲代码:

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)

猜你喜欢

转载自blog.csdn.net/weixin_47128888/article/details/108523217