标题使用合并区间算法实现收藏片段重复片段的去重合并
遇到过这样一个场景:
比如我有两个数据区间的数组,
数组1:[1_2, 4_6],
数组2:[1_3, 5_7]
这四个数据区间合并后的区间是 [1_7];
如果要是一个个去遍历那就太麻烦了,使用合并区间算法可以很容易解决:
/**
* 使用合并区间算法合并不同的数据片段
* @param split1 数据片段集合1
* @param split2 数据片段集合2
* @return 合并后的数据片段的组合的字符串
*/
public static String[] mergeFragment(String[] split1, String[] split2) {
int max1 = Integer.parseInt(split1[split1.length - 1].split("_")[1]);
int max2 = Integer.parseInt(split2[split2.length - 1].split("_")[1]);
// 创建一个int数组,长度等于最大帧数 + 2
int[] fragArr = new int[Math.max(max1, max2) + 2];
// 将两个content的字符串拆分的数组合并成一个
String[] mergeArr = ArrayUtils.addAll(split1, split2);
for (String fragStr : mergeArr) {
String[] frag = fragStr.split("_");
for (int i = Integer.parseInt(frag[0]); i <= Integer.parseInt(frag[1]); i++) {
fragArr[i] = 1;
}
}
String temp = "";
List<String> result = new ArrayList<>();
for (int i = 1; i < fragArr.length; i++) {
if (fragArr[i] == 1) {
if (StringUtils.isEmpty(temp)) {
temp = i + "_";
}
} else {
if (StringUtils.isNotEmpty(temp)) {
result.add(temp + (i - 1));
temp = "";
}
}
}
return String.join("", result);
}
执行结果: