Common array operations in C++ - Time & Space Complexity
When working with arrays, it is important to know how the time to do common tasks changes as the array gets bigger.
We want to understand how fast operations like searching, inserting, or deleting run as the array size grows.
Analyze the time complexity of the following code snippet.
// Find if a value exists in the array
bool contains(int arr[], int n, int target) {
for (int i = 0; i < n; i++) {
if (arr[i] == target) {
return true;
}
}
return false;
}
// Insert a value at the end of the array
void insert(int arr[], int &n, int value, int capacity) {
if (n < capacity) {
arr[n] = value;
n++;
}
}
// Delete a value by shifting elements
void deleteValue(int arr[], int &n, int target) {
int i = 0;
while (i < n) {
if (arr[i] == target) {
for (int j = i; j < n - 1; j++) {
arr[j] = arr[j + 1];
}
n--;
} else {
i++;
}
}
}
This code shows three common array operations: searching for a value, inserting at the end, and deleting a value by shifting elements.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through the array elements.
- How many times: For searching, up to n times; for deleting, nested loops cause up to n² in worst case; for inserting, constant time if space available.
Explain the growth pattern intuitively.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Search: up to 10 checks; Insert: 1 step; Delete: up to 100 shifts |
| 100 | Search: up to 100 checks; Insert: 1 step; Delete: up to 10,000 shifts |
| 1000 | Search: up to 1000 checks; Insert: 1 step; Delete: up to 1,000,000 shifts |
Pattern observation: Searching grows linearly with n, inserting stays constant, deleting can grow quadratically in worst case.
Time Complexity: O(n) for search, O(1) for insert, O(n^2) for delete in worst case
This means searching takes time proportional to the array size, inserting takes constant time, but deleting can take much longer if many elements must be shifted.
[X] Wrong: "Deleting an element from an array is always fast like inserting at the end."
[OK] Correct: Deleting requires shifting elements to fill the gap, which can take much more time as the array grows.
Understanding these basic array operation costs helps you explain your choices clearly and shows you know how data size affects performance.
"What if we used a linked list instead of an array? How would the time complexity of delete change?"
Practice
int arr[5] = {1, 2, 3, 4, 5};Solution
Step 1: Understand array declaration
The code declares an integer array named arr with size 5.Step 2: Check initialization
The array is initialized with values 1, 2, 3, 4, 5 in order.Final Answer:
Creates an array of 5 integers with values 1 to 5 -> Option AQuick Check:
Array declaration with initialization = Creates array with values [OK]
- Confusing array with vector
- Thinking it's a pointer declaration
- Assuming array is uninitialized
arr in C++?Solution
Step 1: Recall zero-based indexing
Arrays in C++ start at index 0, so the third element is at index 2.Step 2: Identify correct syntax for access
Array elements are accessed using square brackets, so arr[2] is correct.Final Answer:
arr[2]; -> Option DQuick Check:
Third element index = 2, use square brackets [OK]
- Using parentheses instead of brackets
- Using 1-based indexing
- Using curly braces for access
int arr[4] = {10, 20, 30, 40};
int sum = 0;
for(int i = 0; i < 4; i++) {
sum += arr[i];
}
std::cout << sum;Solution
Step 1: Identify array elements and loop
The array has elements 10, 20, 30, 40 and the loop runs from i=0 to 3.Step 2: Calculate sum of elements
sum = 10 + 20 + 30 + 40 = 100Final Answer:
100 -> Option AQuick Check:
Sum of all elements = 100 [OK]
- Stopping loop early
- Using wrong indices
- Printing sum before loop
int arr[3] = {5, 10, 15};
for(int i = 1; i <= 3; i++) {
std::cout << arr[i] << " ";
}Solution
Step 1: Analyze loop indices
The loop runs i from 1 to 3 inclusive, so i=3 is included.Step 2: Check array bounds
Array indices are 0,1,2. Accessing arr[3] is out-of-bounds and causes error.Final Answer:
Using <= causes out-of-bounds access -> Option CQuick Check:
Loop must use i < size, not <= [OK]
- Starting loop at 1 instead of 0 (not error but unusual)
- Ignoring out-of-bounds access
- Assuming array size is wrong
int arr[6] = {2, 4, 6, 8, 10, 12};. How do you update the element with value 8 to 9 using a loop?Solution
Step 1: Understand the problem
We want to find the element with value 8 and update it to 9 using a loop.Step 2: Check loop and condition
Loop from i=0 to 5 checks each element; if arr[i] == 8, assign arr[i] = 9.Final Answer:
for(int i=0; i<6; i++) { if(arr[i] == 8) arr[i] = 9; } -> Option BQuick Check:
Loop with condition to find and update element [OK]
- Using wrong indices in loop
- Assigning wrong array index
- Not using loop to find value
Ready to prove it?
Pass the test and this pattern moves unknown
