4412. 構造陣列-區間合併or並查集
題目大意:
有兩個數列,給數列a和b,a已知,b未知。若ai==aj則表示在b數列中[i,j]區間所有數相等。現在b[0]=0,問b陣列有多少種可能。
思路和**:
比較好想,只要看a有幾個區間,答案就是2^(x-1)。
這題給出兩種做法,區間合併和並查集
//區間合併做法
/*先對所有區間按照左端點排序,再去合併
合併時有三種情況:
now: s----------e
1===> l---r
2===> l-------------r
3===> l-----r
其中情況1和情況2只要更新e值,情況3要更新整個區間。
*/void merge(vct&seg)) ;
st = s.fi ;
ed = s.se ;
}else ed = max(ed , s.se) ;
} seg = res ;
}void solve3()else ed[tmp] = i ; }
vctseg ;
for(auto it : num)) ; }
merge(seg) ;
cout << quick_pow(2 , seg.size() - 1 , 998244353) ;
}
//並查集做法
/*將乙個區間所有點放到其右端點
注意 1***2***1xx2 是乙個區間的特殊情況
*/int find(int u , vct&fa)
aisle
void solve2()else }
ll num = n ;
int i = 1 ;
while(i <= n)else
j ++ ;
}i = j ;
} }cout << quick_pow(2 , num - 1 , 998244353) << "\n" ;
}
小結: 陣列 合併區間 簡單
描述 給出若干閉合區間,合併所有重疊的部分。您在真實的面試中是否遇到過這個題?是 樣例given intervals merged intervals 1,3 1,6 2,6 8,10 8,10 15,18 15,18 挑戰 o n log n 的時間和 o 1 的額外空間。題目鏈結 分析 對int...
陣列與排序 合併區間
給出乙個區間的集合,請合併所有重疊的區間。示例 1 輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 示例 2 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。class ...
LeeCode 中等 陣列 56 合併區間
中等陣列 給出乙個區間的集合,請合併所有重疊的區間。輸入 1,3 2,6 8,10 15,18 輸出 1,6 8,10 15,18 解釋 區間 1,3 和 2,6 重疊,將它們合併為 1,6 輸入 1,4 4,5 輸出 1,5 解釋 區間 1,4 和 4,5 可被視為重疊區間。from typing...