Подскажите можно-ли написать более оптимальный алгоритм. Задача звучит так:
Нужно проверить что все в коллекции squares являются квадратными корнями чисел в коллекции numbers. Коллекции отсортированы по возрастанию и не имеют отрицательных значений.
update: если коллекции разной длины то считаем это как false
Примеры входных данных и ответы:
IN: {1, 2}, {1, 4} OUT: TRUE
IN: {1, 3, 5}, {1, 9, 25, 25} OUT: FALSE
Сигнатура функции:
bool TestForSquares(IEnumerable<int> numbers, IEnumerable<int> squares)
Моё решение:
public static bool TestForSquares(IEnumerable<int> numbers, IEnumerable<int> squares) {
var isFirstIteration = true;
var numbersEnumerator = numbers.GetEnumerator();
var squaresEnumerator = squares.GetEnumerator();
while (true) {
bool numberHasNext = numbersEnumerator.MoveNext();
bool squareHasNext = squaresEnumerator.MoveNext();
if(numberHasNext != squareHasNext) {
// случай когда две коллекции имеют разный размер
return false;
}
if(!numberHasNext && !squareHasNext) {
if (isFirstIteration) {
// случай когда две коллекции пусты
return false;
}
break;
}
var testData = numbersEnumerator.Current * numbersEnumerator.Current;
if(testData != squaresEnumerator.Current) {
return false;
}
isFirstIteration = false;
}
return true;
}
p.s.
Так же интересует решение с той же оптимальностью но не такое многословное.