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

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

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



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



分析:
比较常规的判断区间是否重叠的问题,我们仍然可以先设置一个新的合并集合,将合并后的,或者不需要合并的区间放进去,然后返回这个集合的大小。
核心思路还是:集合排序后,可以合并的区间一定互相靠近且连续。并且,题目只要求当某一个集合完全包含在另一个集合当中时,才需要删除,部分重叠则不需要删除。
因此,我们可以将其归纳为以下几个步骤:
对当前区间,若其不与其他区间重叠,则放入新集合
若当前区间与新区间重合,则判断:
当前区间是否包含在新区间内 [1, 2] -> [1,4],若是,则用新区间替换当前区间
当前区间是否包含了新区间 [2,8] -> [3,6],若是,则不做任何操作,继续循环
否则,将新区间放入新集合,继续循环

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

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