Array operations (append, insert, remove) in Swift - Time & Space Complexity
When working with arrays, it's important to know how fast operations like adding or removing items happen.
We want to understand how the time to do these operations changes as the array grows.
Analyze the time complexity of these common array operations in Swift.
var numbers = [1, 2, 3, 4, 5]
numbers.append(6) // Add at the end
numbers.insert(0, at: 0) // Insert at the start
numbers.remove(at: 2) // Remove from middle
This code shows adding, inserting, and removing elements in an array.
Look at what happens inside each operation:
- Primary operation: Moving elements to make space or fill gaps.
- How many times: Depends on position: appending moves none, inserting/removing near start moves many.
As the array gets bigger, the cost changes differently for each operation.
| Input Size (n) | Append | Insert at start | Remove from middle |
|---|---|---|---|
| 10 | ~1 operation | ~10 operations | ~8 operations |
| 100 | ~1 operation | ~100 operations | ~50 operations |
| 1000 | ~1 operation | ~1000 operations | ~500 operations |
Pattern observation: Appending stays fast, but inserting or removing near the start or middle grows with array size.
Time Complexity: O(1) for append, O(n) for insert and remove
This means adding at the end is quick no matter the size, but inserting or removing inside takes longer as the array grows.
[X] Wrong: "All array operations take the same time regardless of position."
[OK] Correct: Because inserting or removing inside requires shifting many elements, which takes more time as the array grows.
Understanding these differences helps you explain why some operations are faster and shows you know how data structures work under the hood.
"What if we used a linked list instead of an array? How would the time complexity for insert and remove change?"
Practice
append method do in a Swift array?Solution
Step 1: Understand the append method
The append method adds a new element to the end of the array, increasing its size by one.Step 2: Compare with other options
Removing elements or inserting at the beginning are done by other methods, not append.Final Answer:
Adds a new element to the end of the array -> Option BQuick Check:
append = add at end [OK]
- Confusing append with insert
- Thinking append removes elements
- Assuming append adds at the start
numbers?Solution
Step 1: Recall the insert syntax in Swift
The correct syntax is array.insert(element, at: index), so numbers.insert(10, at: 2) is correct.Step 2: Check other options for syntax errors
Options A, B, and D use incorrect method names or argument orders.Final Answer:
numbers.insert(10, at: 2) -> Option AQuick Check:
insert(element, at: index) syntax [OK]
- Using append with index
- Wrong method names like add or insertAt
- Swapping argument order
var fruits = ["Apple", "Banana", "Cherry"]
fruits.append("Date")
fruits.remove(at: 1)
print(fruits)Solution
Step 1: Append "Date" to the fruits array
After append, fruits = ["Apple", "Banana", "Cherry", "Date"].Step 2: Remove element at index 1
Index 1 is "Banana", so removing it results in ["Apple", "Cherry", "Date"].Final Answer:
["Apple", "Cherry", "Date"] -> Option CQuick Check:
append + remove(at: 1) = ["Apple", "Cherry", "Date"] [OK]
- Removing wrong index
- Forgetting append adds element
- Confusing remove(at:) with removeLast()
var numbers = [1, 2, 3] numbers.remove(at: 3)
Solution
Step 1: Check array indexes
Array 'numbers' has indexes 0, 1, 2. Index 3 is out of range.Step 2: Understand remove(at:) behavior
Calling remove(at: 3) causes a runtime error because the index is invalid.Final Answer:
Index out of range error because index 3 does not exist -> Option DQuick Check:
remove(at:) needs valid index [OK]
- Using invalid index without checking
- Assuming remove(at:) can remove non-existing index
- Confusing syntax errors with runtime errors
var items = [String](), which sequence of operations will result in ["Pen", "Book", "Eraser"]?Solution
Step 1: Start with empty array and insert "Pen" at index 0
items = ["Pen"]Step 2: Insert "Book" at index 1 and "Eraser" at index 2
items = ["Pen", "Book", "Eraser"]Step 3: Check other options for correctness
items.append("Pen")
items.insert("Book", at: 0)
items.append("Eraser"): append "Pen" -> ["Pen"]; insert "Book" at 0 -> ["Book", "Pen"]; append "Eraser" -> ["Book", "Pen", "Eraser"] (wrong order).
items.append("Pen")
items.append("Book")
items.insert("Eraser", at: 1): append "Pen", append "Book" -> ["Pen", "Book"]; insert "Eraser" at 1 -> ["Pen", "Eraser", "Book"] (wrong order).
items.insert("Pen", at: 1)
items.append("Book")
items.append("Eraser"): insert "Pen" at 1 on empty array -> index out of range error.Final Answer:
items.insert("Pen", at: 0)
items.insert("Book", at: 1)
items.insert("Eraser", at: 2) -> Option AQuick Check:
Insert at correct indexes builds array [OK]
- Inserting at invalid index in empty array
- Confusing append and insert order
- Assuming insert can add beyond current size
Ready to prove it?
Pass the test and this pattern moves unknown
