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)
)