Array methods (length, include?, flatten) in Ruby - Time & Space Complexity
When using array methods like length, include?, and flatten, it helps to know how their speed changes as the array grows.
We want to find out how many steps these methods take when the array gets bigger.
Analyze the time complexity of the following code snippet.
arr = [1, 2, [3, 4], 5]
size = arr.length
has_three = arr.include?(3)
flat = arr.flatten
puts size, has_three, flat.inspect
This code gets the size of the array, checks if 3 is inside, and then flattens nested arrays into one.
Look at what repeats or loops inside these methods.
- Primary operation:
include?andflattenboth check elements one by one. - How many times:
include?checks each element until it finds a match or reaches the end.flattenvisits every element, including inside nested arrays. length: Just returns a stored number, no loops.
As the array gets bigger, the work done changes differently for each method.
| Input Size (n) | Approx. Operations for include? | Approx. Operations for flatten | Approx. Operations for length |
|---|---|---|---|
| 10 | Up to 10 checks | Visit all 10 elements (including nested) | 1 (direct) |
| 100 | Up to 100 checks | Visit all 100 elements (including nested) | 1 (direct) |
| 1000 | Up to 1000 checks | Visit all 1000 elements (including nested) | 1 (direct) |
Pattern observation: include? and flatten take more steps as the array grows, while length stays quick.
Time Complexity: O(1) for length, O(n) for include? and flatten
This means length is very fast no matter the size, but include? and flatten take longer as the array grows.
[X] Wrong: "length must count all elements every time, so it's slow like include?."
[OK] Correct: Ruby stores the array size, so length just returns that number instantly without counting.
Knowing how common array methods work under the hood helps you write faster code and explain your choices clearly in interviews.
"What if the array contains deeply nested arrays? How would that affect the time complexity of flatten?"
Practice
length method do when called on an array in Ruby?Solution
Step 1: Understand the purpose of
Thelengthlengthmethod counts how many items are inside an array.Step 2: Compare with other methods
include?checks for presence,flattenmerges nested arrays, so they do different things.Final Answer:
Returns the number of elements in the array -> Option AQuick Check:
length= count items [OK]
- Confusing length with include? method
- Thinking length flattens nested arrays
- Assuming length removes duplicates
arr includes the number 5?Solution
Step 1: Recall the correct method name and syntax
The method to check presence isinclude?with a question mark at the end.Step 2: Verify method call on array
It should be called asarr.include?(5), notincludeorincludes?.Final Answer:
arr.include?(5) -> Option DQuick Check:
Correct method isinclude?with question mark [OK]
- Omitting the question mark in include?
- Using incorrect method names like includes? or has?
- Using parentheses incorrectly
arr = [1, [2, 3], [4, [5]]] puts arr.flatten.length
Solution
Step 1: Apply
The nested arrayflattento the array[1, [2, 3], [4, [5]]]becomes[1, 2, 3, 4, 5]after flattening.Step 2: Calculate the length of the flattened array
The flattened array has 5 elements, solengthreturns 5.Final Answer:
5 -> Option AQuick Check:
Flattened array length = 5 [OK]
- Counting nested arrays as single elements
- Forgetting flatten changes nested arrays
- Miscounting elements after flatten
nums contains the number 10, but it raises an error. What is the problem?
nums = [5, 10, 15] if nums.include(10) puts "Found 10" end
Solution
Step 1: Identify the method name error
The method to check presence isinclude?with a question mark, notinclude.Step 2: Understand why error occurs
Callingincludewithout question mark is undefined, causing an error.Final Answer:
The method should beinclude?with a question mark -> Option BQuick Check:
Useinclude?to check presence [OK]
- Using include without question mark
- Thinking flatten is needed to check presence
- Confusing number and string types
- Miswriting if statement syntax
data = [[1, 2], [3, [4, 5]], 6], which Ruby code correctly flattens it and checks if the number 4 is included?Solution
Step 1: Flatten the nested array first
Usedata.flattento convert nested arrays into a single-level array.Step 2: Check if 4 is included in the flattened array
Callinclude?(4)on the flattened array to get true or false.Final Answer:
data.flatten.include?(4) -> Option CQuick Check:
Flatten then include? is correct order [OK]
- Calling include? before flatten
- Using include without question mark
- Trying to flatten the number 4
- Incorrect method chaining order
Ready to prove it?
Pass the test and this pattern moves unknown
