题目
思路
刚开始想的是设立10^4的数组,然后区间赋1,再进行汇总,写着写着觉得太麻烦了,直接合并也可以。 于是考虑用HashMap存储,感觉正合适。毕竟二维数组没法动态修改。 后面怎么调都不对,才发现最关键的一步是首先按照intervals[i][0]排序…学到了
代码
public int [ ] [ ] merge ( int [ ] [ ] intervals) {
Arrays . sort ( intervals, new Comparator < int [ ] > ( ) {
public int compare ( int [ ] interval1, int [ ] interval2) {
return interval1[ 0 ] - interval2[ 0 ] ;
}
} ) ;
HashMap < Integer , Integer > map = new HashMap < > ( ) ;
map. put ( intervals[ 0 ] [ 0 ] , intervals[ 0 ] [ 1 ] ) ;
int lastkey = intervals[ 0 ] [ 0 ] ;
for ( int i= 1 ; i< intervals. length; i++ ) {
int target0 = lastkey;
int target1 = map. get ( lastkey) ;
if ( intervals[ i] [ 0 ] > target1) {
map. put ( intervals[ i] [ 0 ] , intervals[ i] [ 1 ] ) ;
lastkey= intervals[ i] [ 0 ] ;
continue ;
} if ( intervals[ i] [ 0 ] < target0) {
map. put ( intervals[ i] [ 0 ] , Math . max ( intervals[ i] [ 1 ] , target1) ) ;
map. remove ( lastkey) ;
lastkey = intervals[ i] [ 0 ] ;
continue ;
}
map. put ( Math . min ( target0, intervals[ i] [ 0 ] ) , Math . max ( target1, intervals[ i] [ 1 ] ) ) ;
lastkey = Math . min ( target0, intervals[ i] [ 0 ] ) ;
}
List < Integer > mapkey = new ArrayList < > ( map. keySet ( ) ) ;
int [ ] [ ] ans = new int [ mapkey. size ( ) ] [ 2 ] ;
for ( int i= 0 ; i< ans. length; i++ ) {
ans[ i] [ 0 ] = mapkey. get ( i) ;
ans[ i] [ 1 ] = map. get ( ans[ i] [ 0 ] ) ;
}
return ans;
}