python[蓝桥杯]藏匿的刺客,贪心

问题描述

  强大的kAc建立了强大的帝国,但人民深受其学霸及23文化的压迫,于是勇敢的鹏决心反抗。
  kAc帝国防守森严,鹏带领着小伙伴们躲在城外的草堆叶子中,称为叶子鹏。
  kAc帝国的派出的n个看守员都发现了这一问题,第i个人会告诉你在第li个草堆到第ri个草堆里面有人,要求你计算所有草堆中最少的人数,以商议应对。
  “你为什么这么厉害”,得到过kAc衷心赞美的你必将全力以赴。

输入格式

  第一行一个数字n,接下来2到n+1行,每行两个数li和ri,如题。

输出格式

  输出一个数,表示最少人数。

样例输入

5
2 4
1 3
5 7
1 8
8 8

样例输出

3

数据规模和约定

  30%的数据n<=10
  70%的数据n<=100
  100%的数据n<=1000
  所有数字均在int表示范围内

算法分享:

其实就是寻找各个区间的不重复(no_chongfu)个数:

 代码如下:

# 藏匿的刺客,贪心,计算最小的值
n = int(input())
chongfu = []  # 把输入的区间暂时存起来
for i in range(n):
    l,r = map(int,input().split())
    chongfu.append([l,r])
    
chongfu.sort(key=lambda x:(x[1],x[0]))  # 按照每个区间的末尾从小到大排序
no_chongfu = [] # 开始计算,申明一个不重复的列表用于存储
# 首先加入第一个
no_chongfu.append(chongfu[0])
right = no_chongfu[-1][-1] # 右边的标记
for i in range(1,len(chongfu)):
    left = chongfu[i][0] # 没有加进来的左边
    if left < right:
        if left>no_chongfu[-1][0]:
            no_chongfu.remove(no_chongfu[-1])
            no_chongfu.append([left,right]) # 加入新列表
               # 做新的标记
            right = no_chongfu[-1][-1]
        else: # 如果left还小于比较对象的left
            new_right = no_chongfu[-1][0]
            no_chongfu.remove(no_chongfu[-1])
            no_chongfu.append([new_right, right])  # 加入新列表
            # 做新的标记
            right = no_chongfu[-1][-1]
    else:
        no_chongfu.append(chongfu[i])
        right = no_chongfu[-1][-1]

print(len(no_chongfu))  # 输出他的个数len

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值