python求解重叠区域线段覆盖总长度

来源:互联网 发布:mysql 根据已有的函数 编辑:程序博客网 时间:2024/05/17 20:27

    来源于网上的一道面试题目,看到后感觉挺新颖的,正好这一篇博客也有了实现,感觉思路很妙,作者给出来的是Java版本的,这里我简单给出来一下python版本的,先贴一下问题的描述:

问题描述:

现有一直线,从原点到无穷大。

这条直线上有N个线段。线段可能相交。

问,N个线段总共覆盖了多长?(重复覆盖的地区只计算一次)

思路:

依据线段的区间将线段的区间像素单位化,即将计算区域的长度转化为所有在覆盖区域中的单位长度的累加即可

下面是具体的实现:

#!usr/bin/env python#encoding:utf-8'''__Author__:沂水寒城功能:求解线段覆盖总长度'''def test_func(num_list):    '''    输入:线段起点、终点    输出:总的覆盖长度    '''    start=1000    end=0    for one_list in num_list:        if one_list[0]<start:            start=one_list[0]        if one_list[1]>end:            end=one_list[1]    #print start, end    flag=['false']*end    for i in range(len(num_list)):        for j in range(num_list[i][0], num_list[i][1]):            flag[j]=True    #print flag    return flag.count(True)if __name__ == '__main__':    num_list1=[[1,3],[2,7],[9,11],[13,20],[15,30]]    num_list2=[[1,3],[2,6],[11,12],[10,13]]    print 'Total Length is:', test_func(num_list1)    print 'Total Length is:', test_func(num_list2)


结果如下:


Total Length is: 25Total Length is: 8[Finished in 0.7s]


原创粉丝点击