Слишком много массивов и списков. Все эти преобразования назад и вперед эффективно делают полные копии данных. Вы можете сэкономить много работы, придерживаясь IEnumerable.
class Program
{
static IEnumerable<int> serviceLane(int[] width, int[,] cases)
{
return Enumerable.Range(0, cases.GetUpperBound(0)).
Select(i => width.Skip(cases[i,0]).Take(cases[i,1]).Min());
}
static void Main(string[] args)
{
int[,] cases = new int[,]
{
{1,2},
{3,4},
{5,7}
};
int[] width = new int[] { 2, 3, 1, 2, 3, 2, 3, 3 };
//changed to [1,0] to say within the bounds of the array
var temp = width.Skip(cases[1,0]).Take(cases[1,1]);
var resultArray = new int[] {temp.Min()};
var resultString = string.Join(",", serviceLane(width, cases));
}
}
Однако эта программа будет иметь ту же проблему, что и оригинал: неверные данные . Массив width
невелик для всех возможных примеров. Мы можем настроить метод, чтобы учесть это:
static IEnumerable<int> serviceLane(int[] width, int[,] cases)
{
return Enumerable.Range(0, cases.GetUpperBound(0)).
Select(i =>
{
if (cases[i,0] + cases[i,1]) >= width.Length)
{
//do something here. Width is not long enough.
}
else
return width.Skip(cases[i,0]).Take(cases[i,1]).Min();
});
}
Но, вероятно, мы неправильно видим данные выборки ширины.