算法: 计算多个线段实际覆盖的长度。
例如:
线段组1
:{
{1, 2}, {2, 3}, {3, 5}, {4, 10.5}, {11, 13}}的长度为
[1,10.5],[11,13]的长度为11.5;
线段组2
:{
{1, 5}, {4, 5}, {0.7, 6}, {0.9, 1.5}}的长度为[0.7,6]的长度为5.3;
思路分析:
1.由题意知道: 要求实际长度,凡是两个线段有重叠的地方我们都需要合并
2.这里采用双重遍历分别拿数组的第1个值跟第二个比较,拿线段组1
举例,
第一次是用{1,2},{2,3}
比较,发现重叠线段,合并成{1,3}。此时线段组1
为{
{1, 3}, {3, 5}, {4, 10.5}, {11, 13}}
3.重置循环,第二次拿{1, 3}, {3, 5}
比较,合并成{1,5}。以此类推,最终合并后的线段组1
为{
{1,10.5},{11,13}}
4.遍历线段组1
并累加求和输出结果: 11.5
那么代码片如下:
public static double coverageLength(double[][] nums) {
List<double[]> list = new LinkedList<>();
for (int i = 0; i < nums.length; i++) {
list.add(nums[i]);
}
for (int i = 0; i < list.size(); i++) {
for (int j = i + 1; j < list.size(); j++