问题描述

我们有很多区域,每个区域都是从a到b的闭区间,现在我们要从每个区间中挑选至少2个数,那么最少挑选多少个?

输入描述

第一行是N(N<10000),表示有N个区间,之间可以重复
然后每一行是ai,bi,持续N行,表示现在区间。均小于100000

输出描述

输出一个数,代表最少选取数量。

示例

4
4 7
2 4
0 2
3 6

输出

4

问题分析

这题我本来想的是对区间右端点进行一下排序,然后对于每个区间,都向前去查询是否与上一个,上上个等区间有交集。 这种算法已经很接近正确答案了,但是依然不是正确答案。为啥呢?
先看一个适用的例子:

[0,2],[2,4],[4,7]

这样可以看是没啥问题的。因为[2,4]和[0,2]有一个交点2,所以可以省掉一个点。
而[4,7]和[2,4]有一个交点4. 所以又省掉了一个点。所以我们就可以得出结论,这3个区间只需要4个点就能满足题意。

但是对于以下的来说:

[0,2],[1,3],[3,4]

按照我们的理论,这样可以省掉3个点,即用3个点就可以符合题意。即用1,2和3即可。但是这样是不行的,因为1,2选点满足提议。然后3,4要选2个点。因为之前的点跟这里是没有啥关系的了。

所以我们应该用递推的方式,要维持一个last数组,last数组的最后两个元素存储了最近的符合题意的选点。这样的话我们就可以得知我们要对新增的区间新增几个点可以符合题意。

# 按照右区间排序
# 向上找curLeft <= lastRight的情况
# 统计次数
class Solution:def __init__(self,num):self.num = numself.datas = []for i in range(num):a,b = map(int,input().split())self.datas.append([a,b])self.datas.sort(key=lambda x: x[1])def solution(self):count = 2selected = [self.datas[0][1]-1,self.datas[0][1]] # 最后两个点加入last数组for i in self.datas[1:]:if i[0] <= selected[-2]: # 如果最后一次选点能满足当前区间,则什么都不做continueelif i[0] <= selected[-1]: # 如果最后一次选点的第2个点能满足当前区间,则新增一个点count += 1selected.append(i[1])else: # 否则新增2个点count += 2selected.append(i[1]-1)selected.append(i[1])return count
num = int(input())
s = Solution(num)
res = s.solution()
print(res)

021 招商银行信用卡 -挑选代表相关推荐

  1. 招商银行信用卡2018春季招聘研发(第一批)编程题 - 题解

    招商银行信用卡的题难度一般,基本都能做出来,因此,解析就写得简单些了.而且题中没有给出数据范围,说明数据不会很大,因此这三个题都可以暴力求解. 第一题 题目 给出一个非空字符串,判断这个字符串是否是由 ...

  2. 招商银行信用卡2019届实习笔试题

    招商银行信用卡2019届实习笔试题 题目表述:如图 思路:有向图中找回环.(具体方法和原理可以参考相关博客)同时标记那些指向回环的顶点.全部的顶点去掉被标记的顶点,输出就是答案了.完全按照题目中的提示 ...

  3. 招商银行信用卡推荐链接

    https://ccclub.cmbchina.com/crdcardapply/loginchannelselect.aspx?cardsel=&Recommender=te87MwwdyG ...

  4. 20190915招商银行信用卡

    招商银行信用卡20190915 1. 在一根数轴上,1-n的每个点上都标有'L'或'R',最初每个点上都有一个机器人.现在所有机器人同时一起执行以下操作10^100次: 如果该点上标有'L',则机器人 ...

  5. 招商银行信用卡还款冲账顺序

    招行信用卡用户为招商银行信用卡还款时,是有一定的还款顺序的,这里简单介绍招行信用卡还款顺序,方便招行信用卡持卡人. 对已出账单部分按照年费.利息.费用.预借现金本金.刷卡消费本金的顺序逐项抵偿您的账务 ...

  6. 招商银行信用卡使用说明

    招行信用卡客服电话有三个,4008205555.8008205555.021-38784800,三个号码都是呼入同一客服中心的,没有差别的. 总写技术的文章难免有点枯燥,今天周末啊....换个口味.. ...

  7. 投诉申告:招商银行信用卡岂能如此无信用?!

    招商银行信用卡目前对逾期未还款的计息是非常不合情理和道德的!甚至有可能是不合法的霸王条款! 在我们申请信用卡时,上面已经说明免息期为上月账单日期至按上月账单还款日期,即大概为30+7=37天. 照我们 ...

  8. 如何办理中国银行借记卡给招商银行信用卡转帐

    因为公司办的工资卡是中国银行的,而自己办的是招商银行信用卡, 每个月还款就是个麻烦事.每次都是从中行取钱再还到招行,以前在朝阳门上班还好,各家银行都挨着,花半个小时就搞定,现在公司搬到北四环,附近没有 ...

  9. 关于招商银行信用卡的若干事宜

    今天打招行的客服开通了我这在抽屉里封存已久的招行信用卡.用惯了工行的国际卡,习惯了一卡加一密码的的形式,而对这个与国际高度接轨的招行信用卡,很是不熟悉,密码要分什么查询密码,取现密码和网上支付密码.而 ...

最新文章

  1. 设置Cocos2D屏幕横向或纵向的方法
  2. Mac安装双系统-win10
  3. linux图片添加滤镜,PhotoFlare开源图像和照片编辑器,附在Ubuntu 18.04下的安装方法...
  4. mysql linux 下载安装,Mysql 下载 安装 for linux
  5. java电信计费项目论文_基于JAVA开发的电信IP计费系统设计毕业论文
  6. hinton教授的本科生课程CSC321-机器学习中的神经网的笔记
  7. java单分支结构,java基础语法分支结构
  8. 归纳下js面向对象的几种常见写法
  9. 在 lamp(centos)下配置二级 域名 、虚拟主机
  10. 【天锐绿盾】之常见问题处理:控制台登录提示采集服务器空间不足,修改数据保存时间
  11. cpu温度过高 ubuntu_Ubuntu/Debian 查看CPU温度的方法
  12. 键鼠共享软件分享,让你一套键鼠控制多台设备(多平台)
  13. 贪心算法解决雷达站建站问题
  14. iOS系统语音播报文字
  15. 人机智能交互技术(ROS)实践作业模版与说明
  16. 阿里暑期实习生面试经验-数据分析岗位
  17. 服务器cpu怎么选,E5-2670 or i9-9900K
  18. SDA(静态数据认证)
  19. Python可以自学吗?
  20. 没有准备充分,请先不要着急投简历

热门文章

  1. 满满的回忆,留在了潍柴汽车(我和小福的故事之七)
  2. 嵌入式实时操作系统UCOSII(邵贝贝)--笔记之实时系统概念(第二章)
  3. 电脑软件故障诊断方法和排除
  4. java ee程序员招聘_程序员招聘网
  5. golang设计模式——装饰器模式
  6. Mac电脑用的DVD刻录软件
  7. 国内手机月销量排名出炉,Vivo位列第一
  8. 谁说女测试员不能月收入破万吗?这38张图(市场+学习技能),学会我跪了!
  9. matlab 画波特图
  10. 天津港焦炭码头牵手图扑软件,可视化解锁智慧焦炭港口