Context:
I have a variable numbers of type IEnumerable<int>.
I want to check if numbers are in ascending order.
Algorithm
So I was getting the first element storing it in prev and wanted to check that against next subsequent numbers.
// numbers can contain "10, 20, 60, 50"
IEnumerable<int> numbers = TraverseInOrder(root);
int prev = numbers.FirstOrDefault();
foreach (var curr in numbers.Skip(1))
{
if (curr < prev) return false;
prev = curr;
}
return true;
Question
I am setting the value of prev using numbers.FirstOrDefault() and also skipping one element(numbers.Skip(1)) in foreach to start from next element.
So for following codes,
numbers.FirstOrDefault()
numbers.Skip(1)
Am I enumerating the numbers twice O(2N)? Meaning FirstOrDefault iterate the whole list?
-or-
Is it still O(N)? (O(1) constant time for FirstOrDefault + O(N) for Skip(1))