获得徽章 0
书接上回,师兄的方法非常巧妙,就是在区间的两端加上标记(左端点标记为-1;右端点标记为1),具体代码如下图:
对整个列表进行遍历,把各个区间端点的标记值相加,当且仅当标记的和为零时,此时从-1到0的过程是经历了一整个连续的大区间,即如果有多个区间存在交集,那么只需要记录从第一次出现-1开始(即为大区间的左端点),到标记之和为0为止(即为大区间的右端点)的这个过程,是不是非常方便简洁
展开
Xiaomen于2023-04-12 00:30发布的图片
1
今天兴冲冲地把好不容易写出来的代码给师兄看,结果师兄提供了一个更加简洁的代码,我真正知道了什么叫you will know it when you find it.代码时候整理完了再发,嘿嘿
评论
最近在师兄在做一个实验室的课题,对于我这个刚刚进实验室的小趴菜,师兄给了我一个思考题:已知多个无交集的区间(如“1-7;10-20;30-40”),给出了一个新的区间(可能与之前的多个区间有交集也可能没有)(如“8-24”),如何求这些区间的并集?
对于我这个python都只会if else的小趴菜来说上手确实有难度呜呜呜,困扰我的主要有两个问题:1、如何判断新区间是否部分或全部包含在旧的区间内;2、求并集之后的新范围如何列出来(开始想的是比大小之后先把有变化的那部分remove再append新的范围进去,但是实操之后发现很麻烦就放弃了)。经过不懈的努(sou)力(google),从列表开始复习起(悲),总算是在大佬的帮助下实现了这个要求,关键的两个步骤如下(放代码太长了我就放照片吧):
首先需要弄清楚如何两个集合的并集,具体代码见下图,这里根据前一个区间的较大值与后一个区间比较(因为是以每个区间的第一个值排序,每个区间内也是由大到小排的,所以前一个区间的较小值是一定小于等于后一个区间的较小值的),可以分为大致三类;
其次就是对多个区间求并集,这里大佬很巧妙的地方就是根据集合的个数进行分类,减轻了很多的工作量(也可能是我太菜了想不到)。
最后还有一个小问题就是得到的是一个列表形式的范围,但是如何把这个范围以“1-24;30-40”这种字符串的形式输出我明天还得再想想,因为师兄和我说的之后的范围可能很多不只这三四个,所以得想一个比较好的转换方法。(我的表达能力不太好,如果有读到这儿的大佬感谢愿意花时间看我这个小趴菜的打卡,如果我写的有啥错误的话希望大佬们帮帮我指出来,感恩[爱心]
参考网站:blog.csdn.net
展开
Xiaomen于2023-04-07 03:56发布的图片
Xiaomen于2023-04-07 03:56发布的图片
评论
关注了
字节跳动青训营
VIP.4 融会贯通
关注了标签 Ajax Ajax
关注了标签 Icon Icon
关注了标签 JSON JSON
下一页