欢迎光临散文网 会员登陆 & 注册

349. 350. | 区间合并题型 LeetCode

2020-05-15 10:53 作者:有木乘舟  | 我要投稿


分析:

  题目只需要输出有交集的区间中的元素,且不重复。我们可以用哈希表来存储nums2,然后遍历nums1判断是否有元素存在于哈希表中,若是的话就是交集元素。

  不过,仔细观察代码可以发现,对于nums2中重复的元素,我们只需要存储一次即可,也就是说哈希表中的每个元素都是不同的。这时候我们可以直接用set容器来替代map,并且set容器可以直接删除交集元素,而无需额外的判断。  

分析:

  这题与349一样,用哈希表来解题就可以了。

分析:

  比较常规的判断区间是否重叠的问题,我们仍然可以先设置一个新的合并集合,将合并后的,或者不需要合并的区间放进去,然后返回这个集合的大小。

  核心思路还是:集合排序后,可以合并的区间一定互相靠近且连续。并且,题目只要求当某一个集合完全包含在另一个集合当中时,才需要删除,部分重叠则不需要删除。

  因此,我们可以将其归纳为以下几个步骤:

  • 对当前区间,若其不与其他区间重叠,则放入新集合

  • 若当前区间与新区间重合,则判断:

    • 当前区间是否包含在新区间内 [1, 2] -> [1,4],若是,则用新区间替换当前区间

    • 当前区间是否包含了新区间 [2,8] -> [3,6],若是,则不做任何操作,继续循环

  • 否则,将新区间放入新集合,继续循环

  进一步的,我们发现 [1,2]->[1,4] 和 [2,8]->[3,6] 只是因为前后位置不同,所以导致了我们需外额外判断这两种情况。那如果,我们能把大的区间放到前面去,小的区间放到后面去,是不是就只需要判断一次就可以了呢?

  这种方法就是利用STL的特性,在排序的时候就把上面的那种情况考虑进去,使得排序后的集合,大的区间永远在小的区间前面。这样的话,我们只需要判断当前区间是否包含新区间即可。

349. 350. | 区间合并题型 LeetCode的评论 (共 条)

分享到微博请遵守国家法律