贪心算法题目

贪心算法

情侣配对最小移动步数
题目描述

牛牛和妞妞在一天晚上决定一起去看一场情人节演唱会,可是由于这场演唱会实在太出名了,有很多情侣都来观看,牛牛和妞妞不小心被人流冲散了!
维持秩序的人决定,让大家排成一列,相邻两个进去的人(2k-1和2k,k为正整数)坐在相邻座位。但是现在的队伍乱糟糟的,有很多情侣都不在相邻位置。维持秩序的人同意让情侣们跟相邻的人交换位置,直到所有情侣都在2k-1和2k位置上为止。
但是维持秩序的人很没有耐心,所以需要最少的交换次数,你能帮情侣们算出这个次数吗?

输入描述:
第一行一个整数n,表示一共有n对情侣,编号从1到n。同一对情侣编号相同。1<=n<=100
第二行2n个整数ai,表示编号为ai的情侣在第i个位置。1<=ai<=n

输出描述:
一个整数,代表最少交换次数。

原址修改数组,每次统计当前这对情侣的配对步数,累加即可。

n=2*int(input())
a=list(map(int,input().split()))
s = 0
for i in range(0,n-1,2):
    if a[i]!=a[i+1]:
        pre = a[i+1:].index(a[i])+i+1
        for j in range(pre,i+1,-1):
            a[j],a[j-1]=a[j-1],a[j]
            s+=1
print(s)

原址删除数组,统计配对步数,由于不停地删除数组元素,所以index就是移动步数。

N = int(input())
lyst = [int(i) for i in input().split(' ')]
res = 0
while len(lyst) > 2:
    curnum = lyst.pop(0)
    ind = lyst.index(curnum)
    res += ind
    lyst.pop(ind)
print(res)

先保存着,以后接着续。

牛客网是一个提供编程练习和算法训练的平台,其中包含大量与贪心算法相关的题目。以下是一些常见的贪心算法题目示例,适合不同水平的学习者进行练习: ### 牛客网上常见的贪心算法题目 1. **活动选择问题** - 题目描述:给定一系列活动的开始和结束时间,选择尽可能多的互不重叠的活动。 - 解题思路:按照活动的结束时间进行排序,然后依次选择最早结束的活动,避免冲突。 2. **背包问题(分数背包)** - 题目描述:给定一个固定容量的背包和若干物品,每个物品有重量和价值,要求在不超过背包容量的情况下,装入物品使得总价值最大。物品可以分割。 - 解题思路:计算每个物品的单重量价值,优先选择单价值最高的物品。 3. **哈夫曼编码** - 题目描述:给定一组字符及其出现频率,构造一棵哈夫曼树,使得编码后的数据长度最短。 - 解题思路:每次选择频率最小的两个节点合并,直到所有节点合并为一棵树。 4. **任务调度问题** - 题目描述:给定多个任务的开始和结束时间,安排任务调度使得完成时间最短。 - 解题思路:根据任务的结束时间进行排序,优先安排最早结束的任务。 5. **区间调度问题** - 题目描述:给定多个区间,选择尽可能多的不重叠区间。 - 解题思路:按照区间的结束时间排序,依次选择最早结束的区间,并跳过与之冲突的区间。 6. **加油站问题** - 题目描述:一辆车沿着一条环形公路行驶,每个加油站都有一定的汽油量,判断是否可以从某个起点出发完成整个旅程。 - 解题思路:遍历所有加油站,计算当前油量是否可以到达下一个加油站,若油量不足则更新起点。 7. **跳跃游戏** - 题目描述:给定一个数组,数组中的每个元素表示在该置可以跳跃的最大步数,判断是否可以从起点跳跃到终点。 - 解题思路:维护一个变量记录当前能够到达的最远置,逐步更新该变量。 ### 示例代码:跳跃游戏 以下是一个跳跃游戏的Python实现示例: ```python def canJump(nums): max_reach = 0 # 当前能够到达的最远置 for i in range(len(nums)): if i > max_reach: return False # 当前置无法到达 max_reach = max(max_reach, i + nums[i]) # 更新最远置 if max_reach >= len(nums) - 1: return True # 已经可以到达终点 return False ``` ### 相关问题 1. 牛客网上的贪心算法题目如何分类? 2. 贪心算法与动态规划的区别是什么? 3. 如何判断一个题目是否适合使用贪心算法? 4. 牛客网上的贪心算法题目是否有难度分级? 5. 贪心算法在实际编程竞赛中的应用场景有哪些?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值