Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Вычислить процент покрытия

13.12.11 12:06
Re: Вычислить процент покрытия
 
Skeeve постоялец
в ответ kashej 13.12.11 09:11, Последний раз изменено 14.12.11 10:36 (Skeeve)
Делов на 5 минут. Не тестировал, не на JAVA, но доработать наверняка сможешь и сам.

public class Foo
{
List<int> intervals = new List<int>();
public double AddInterval(int x1, int x2)
{
// merge intervals
List<int> newIntervals = new List<int>();
int j = 0;
while (j < intervals.Count && intervals[j] < x1)
{
newIntervals.Add(intervals[j++]);
}
if (j == intervals.Count)
{
newIntervals.Add(x1);
}
else if ((j & 1) == 0)
{
newIntervals.Add(x1);
}
else if (intervals[j] == x1)
{
j++;
}
while (j < intervals.Count && intervals[j] < x2)
{
j++;
}
if (j == intervals.Count)
{
newIntervals.Add(x2);
}
else if (intervals[j] == x2)
{
if ((j & 1) == 0)
{
j++;
}
}
else if ((j & 1) == 0)
{
newIntervals.Add(x2);
}
while (j < intervals.Count)
{
newIntervals.Add(intervals[j++]);
}

intervals = newIntervals;
// compute coverage
int totalLength = intervals[intervals.Count - 1] - intervals[0];
int covered = 0;
for (j = 0; j < intervals.Count; j += 2)
{
covered += intervals[j + 1] - intervals[j];
}
return ((double)covered) / totalLength;
}
}


 

Перейти на