Start at the first element and update whenever a smaller value appears.
Calculation
min = 12
i=1 → 45 ≥ 12 → no change
i=2 → 2 < 12 → min = 2
i=3 → 42 ≥ 2 → no change
i=4 → 19 ≥ 2 → no change
Minimum = 2
Code
Python Programs
Start with a simple running minimum. Then track the index when you also need the position.
Example 1 — Linear Scan
Keep a running minimum and update it whenever a smaller element appears.
python
def find_min(arr):
if not arr:
raise ValueError("Array must not be empty.")
min_val = arr[0]
for i in range(1, len(arr)):
if arr[i] < min_val:
min_val = arr[i]
return min_val
numbers = [12, 45, 2, 42, 19]
print("Minimum =", find_min(numbers))
Output
Minimum = 2
How It Works
Reject an empty list before reading arr[0].
Seed min_val with the first element.
Loop from index 1 through the rest of the list.
Update when arr[i] < min_val.
Return the final running minimum after one pass.
Example 2 — Track Index
Same scan, but also remember the first index where the minimum appears.
python
def find_min_index(arr):
if not arr:
raise ValueError("Array must not be empty.")
min_index = 0
for i in range(1, len(arr)):
if arr[i] < arr[min_index]:
min_index = i
return min_index
numbers = [12, 45, 2, 42, 19]
index = find_min_index(numbers)
print(f"Min = {numbers[index]} at index {index}")
Output
Min = 2 at index 2
How It Works
Start with min_index = 0 (first element is the candidate).
Compare each later element to arr[min_index].
When a smaller value appears, store that new index.
Ties keep the earlier index because the test uses strict <.
Read the value with numbers[index] after the scan.
Edge Cases & Pitfalls
Check these before calling the solution done.
Empty
No minimum
Validate length before using arr[0].
Seed with 0
Wrong for positives
Seeding min_val = 0 fails when every element is positive.
Duplicates
Same answer
Multiple copies of the min still return that value.
Built-in
min() later
Interviews often want the loop first; min(arr) is fine afterward.
Analysis
Time and Space Complexity
Program
Time
Extra space
Linear scan
O(n)
O(1)
Track index
O(n)
O(1)
You need about n − 1 comparisons in the worst case. One pass is optimal for an unsorted list.
Remember
Key Takeaways
Pattern: seed with arr[0], then scan with <.
Empty: validate before reading the first element.
Index: same loop can track where the min sits.
Test: [12, 45, 2, 42, 19] → 2.
One line: one pass, keep the smaller value — that is the minimum.
Frequently Asked Questions
The first element is a valid candidate. Then every later element is compared against that running minimum.
An empty list has no minimum. Validate len(arr) > 0 and raise or return early.
Yes. The minimum is still the smallest value (for example 2 in [12, 45, 2, 19]).
No. Sorting is usually slower than one linear scan when you only need the minimum.
One pass over n elements: O(n) time and O(1) extra space.