排队唱歌

Posted ai-learning-blogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排队唱歌相关的知识,希望对你有一定的参考价值。

题目描述
我们部门要排队唱歌,大家乱哄哄的挤在一起,现在需要按从低到高的顺序拍成一列,
但每次只能交换相邻的两位,请问最少要交换多少次

输入描述:
第一行是N(N<50000),表示有N个人
然后每一行是人的身高Hi(Hi<2000000,不要怀疑,我们以微米计数),持续N行,表示现在排列的队伍
输出描述:
输出一个数,代表交换次数。
示例1
输入
6
3
1
2
5
6
4
输出
4

 

参考:

思路:二分查找

import bisect  #二分查找
def func(lst, n):
    s = [lst[0]]
    res = 0
    for i in range(1, n):
        j = bisect.bisect(s, lst[i])
        bisect.insort(s, lst[i])
        res += (i-j)
    return res

if __name__ == __main__:
    n = int(input())
    lst = []
    for i in range(n):
        lst.append(int(input()))
    res = func(lst, n)
    print(res)

 注:

i = bisect.bisect(s, val) 在有序序列s中,查找val应当插入到序列s的哪一个位置,返回索引值。 

bisect.insort(s, item)把变量item插入到序列s中,并保持s的升序顺序。

 

以上是关于排队唱歌的主要内容,如果未能解决你的问题,请参考以下文章

芜湖,这是一棵会唱歌的圣诞树

如何唱歌好听

虽然自己不是唱歌的材料

虽然自己不是唱歌的材料

python 用电子邮件唱歌

鸭子唱歌-贪心