栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【python练习题 03】高矮个子排队

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【python练习题 03】高矮个子排队

题目
现在有一队小朋友,他们高矮不同,我们以正整数数组表示这一队小朋友的身高,如数组{5,3,1,2,3}。

我们现在希望小朋友排队,以“高”“矮”“高”“矮”顺序排列,每一个“高”位置的小朋友要比相邻的位置高或者相等;每一个“矮”位置的小朋友要比相邻的位置矮或者相等;

要求小朋友们移动的距离和最小,第一个从“高”位开始排,输出最小移动距离即可。

例如,在示范小队{5,3,1,2,3}中,{5, 1, 3, 2, 3}是排序结果。{5, 2, 3, 1, 3} 虽然也满足“高”“矮”“高”“矮”顺序排列,但小朋友们的移动距离大,所以不是最优结果。

移动距离的定义如下所示:
第二位小朋友移到第三位小朋友后面,移动距离为1,若移动到第四位小朋友后面,移动距离为2。

思路
列表分为高个子组、矮个子组,高个子组下表述是奇数,
矮个子组下标是偶数,遍历列表找对应数字

题解

ls = input().split()
ls1 = sorted(ls[1:])  # 去掉ls第一位,升序,ls1第一位是矮个子
high = []
short = []
n = (len(ls)-1) % 2
if n == 0:
    short.append(ls1[:n])
    high.append(ls1[n:])
new_ls = []  # 需要移动小朋友的身高
for i in range(len(ls1)):  # 如何保证下标是偶数?
    if ls1[i] in short and ls1[i+1] in high:
        continue
    elif ls1[i] not in short:
        new_ls.append(ls1[i])
    elif ls1[i] not in high:
        new_ls.append(ls[i])
c = new_ls[2]
new_ls[2] = new_ls[1]
new_ls[1] = new_ls[0]
new_ls = c
ls[0] + new_ls
print(ls[0]+ls1)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976892.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号