问题描述:
为了提高文章质量,每一篇文章(假设全部都是英文)都会有m名编辑进行审核,每个编辑独立工作,会把觉得有问题的句子通过下标记录下来,比例
[1, 10]
,
1
表示病句的第一个字符,
10
表示病句的最后一个字符。也就是从
1
到
10
个字符组成的句子,是有问题的。
现在需要把多名编辑的有问题的句子合并起来,送给总编辑进行最终的审核。比如编辑A指出的病句是
[1, 10]
,
[32, 45]
;B编辑指出的病句是
[5, 16]
,
[78, 94]
,那么
[1, 10]
和
[5, 16]
是有交叉的,可以合并为
[1, 16]
,
[32, 45]
,
[78, 94]
。
输入示例:
3 # 编辑数
1,10;32,45 # 编辑1感觉有问题的句子
78,94;5,16 # 编辑2感觉有问题的句子
80,100;200,220;16,32 # 编辑3感觉有问题的句子
输出示例:
1,45;78,100;200,220 # 合并之后的结果
问题分析:
先按照第一个关键字排序,然后依次合并。(应该是LeetCode上面的一个题目,但是记不清那个了)
Python3实现:
# 今日头条-算法工程师内推-编程题2(笔试时间2018-08-12 10:00~12:00)
# 排序 然后 依次合并
# @Time :2018/08/12
# @Author :LiuYinxing
def getMerge(arr):
arr = sorted(arr, key=lambda x: x[0]) # 以第一个元素为标准排序
cur, res = arr[0], ''
for v in arr:
if cur[1] < v[0]: # 出现不连接的数据,前一个数据直接写到结果中,并更新当前值
res = res+str(cur[0])+','+str(cur[1])+';'
cur = v
elif cur[1] < v[1]: # 出现合适的,合并
cur[1] = v[1]
res = res + str(cur[0]) + ',' + str(cur[1])
return res
if __name__ == '__main__':
n = int(input().strip())
arr = []
for i in range(n):
line = list(map(str, input().split(';')))
for x in line:
arr.append([int(x) for x in x.split(',')])
print(getMerge(arr))
发现问题欢迎指正哦。