创建了一个名为nums_list的vector容器,其中存储了一系列的pair<int, int>
- 我的原始人解法:直接遍历每个区间,加到 set,最后返回 set 的长度
-
public int numberOfPoints(List<List<Integer>> nums) {
Set<Integer> set = new HashSet<>();
for(List<Integer> l : nums){
for(int i=l.get(0);i<=l.get(1);i++){
set.add(i);
}
}
return set.size();
}
- 他人解法:比较两个区间,根据能否合并区间划分,你会发现总共只有 6 种可能。设区间 1 两端为 3,5,区间 2 两端为 a,b:
- a < 3 时有三种情况,比如 a 为 2
- 3<=a<=5 时有两种情况,比如 a 为 4
- b<=5(合并后仍为 3-5),b>5(合并后为 3-b)
- a>5 时那 b 不用说了也大于 5,所以只有一种情况。此时无法合并
- 那么,如果我们对 nums 根据区间起点进行排序,使得遍历 nums 时保证 3<=a 就只剩下了三种情况。我们先构造一个区间,然后遍历区间时如果能合并区间就合并,如果不能那么我们就计算当前区间包含几个点,然后更新成新的区间即可。
-
public int numberOfPoints(List<List<Integer>> nums) {
Collections.sort(nums,(l1,l2)->l1.get(0)-l2.get(0));
int start=0,end=0,ans=0;
for(List<Integer> l:nums){
if(l.get(0)<=end){
if(l.get(1)>end){
end=l.get(1);
}else{
continue;
}
}else{
ans+=end==0?0:end-start+1;
start=l.get(0);
end=l.get(1);
}
}
ans+=end-start+1;
return ans;
}