【算法】求区间并集的长度
来源:互联网 发布:武汉java培训 编辑:程序博客网 时间:2024/06/05 19:34
给定数轴上的一些区间,求区间并集的长度。
只需要用一个cover来记录当前区间覆盖的层数。从左到右遇到一个点就判断:每作过一次区间左端点,cover就加1,每作过一次区间右端点,cover就减1,。显然cover只有正整数和0两种状态,为正数时就将临近两个点所指代的小区间长度加进来。
*求区间并集长度
def howmany(a,b):#求b在列表a中出现的次数 num=0 for i in a: if i==b: num+=1 return numleft=[]#存储左端点right=[]#存储右端点allpoint=[]#存储所有点while(1): x=float(input('左端点')) y=float(input('右端点')) if (x==0 and y==0) or (x>y):#输入0 0或者不合法时退出 break left.append(x) right.append(y) allpoint.append(x) allpoint.append(y)allpoint.sort()#存所有点的list排序cover=0#遇到区间左点时+1,遇到区间右点时-1length=0.0#用于求并区间长度for i in range(len(allpoint)-1): if allpoint[i+1]==allpoint[i]:#有重复点时跳过去(长度就是0) continue cover+=howmany(left,allpoint[i])#加上作左点的次数 cover-=howmany(right,allpoint[i])#减去作右点的次数 if cover==0:#为0时说明不在集合中,跳过去 continue length+=allpoint[i+1]-allpoint[i]#cover大于0时这个小区间就加进来print ('length=',length)
也可以用最右点减去最左的点得到的长度,依次减去那些cover为0的小区域的长度。
阅读全文
0 0
- 【算法】求区间并集的长度
- 【算法】求两个区间的重叠长度
- 算法 数学区间求并集
- PID13 / 校门外的树 ☆(m段区间求区间并长度)
- 求区间并的个数
- RMQ 之 ST算法的使用 【总结】 【附带求固定区间长度的一维技巧】
- HDU5481求数轴的并集的长度
- 区间集的覆盖长度
- 区间求并集c++实现
- hdu4745(区间dp,求最大回文串的长度)
- 求对称字符串的最大长度算法
- 区间求交集算法
- SDNU 1310.Cover Interval 区间合并之后求覆盖的区间长度
- 不相交集的求并算法(按集合大小求并+按高度求并)
- 求字符串长度并返回
- 任意长度的两个整数集合求并集与交集
- C# 求List<> 的长度并删除某一项 AsyncState
- 17周 项目2.3 求字符串的长度并返回
- macOS系统安装gnuplot(解决Terminal type set to unknown)
- linux定时任务
- Activity基础知识
- 十大经典排序
- hdu 1686 KMP
- 【算法】求区间并集的长度
- Java实现数字签名算法
- 一招搞定多Offer选择问题
- 详解C语言中的stdin,stdout,stderr
- Day03-Android发展史概要
- bzoj3075 [Usaco2013]Necklace dp+kmp
- java关键字之static
- 测试的那点事-稳定性测试
- NS2初学笔记(二)之 ns2基本结构与交互问题