public static IntRange GetHistogramRange(this int[] values, double percent)
{
int total = 0;
// for all values
for (int i = 0; i < values.Length; i++)
{
// accumulate total
total += values[i];
}
int min, max, hits;
int h = (int)(total * (percent + (1 - percent) / 2));
// get range min value
for (min = 0, hits = total; min < values.Length; min++)
{
hits -= values[min];
if (hits < h)
break;
}
// get range max value
for (max = values.Length - 1, hits = total; max >= 0; max--)
{
hits -= values[max];
if (hits < h)
break;
}
return new IntRange(min, max);
}