best_length = 0;
for (b1 = 0; b1 < n; ++b1) {
for(b2 = b1+1; b2 < n; ++b2) {
i = 0;
// Если куски не могут пересекаться, то надо еще проверить, что b1+i<b2.
while (b2+i < n && s[b1+i] == s[b2+i]) {
++i;
}
if (i > best_length) {
best_length = i;
best_beg = b1;
}
}
}
// Вывести кусок с best_beg длиной best_length.
// сложить элементы второго массива в HashSet set.
...
// отфильтровать первый массив.
int last = 0;
for (i = 0; i < array1.Length; ++i) {
if (!set.Contains(array1[i])) {
array1[last] = array1[i];
last++;
}
}
Array.Resize(ref array1, last);
for (MyClass mc : arrayList) {
cur_length = mc.GetX() - prev_x;
// рассматриваем отрезок (prev_x, mc.GetX()), не включая границы-точки!
// Поэтому GetY() прибавляем в конце!
// пропускаем отрезки нулевой длины - они из-за совпадающих точек и смысла не несут
if (cur_length > 0) {
result.add(new Segment(cur_length, cnt);
}
cnt += mc.GetY();
prev_x = mc.GetX();
}