Definition
Smallest value
Return the least element in an array of numbers.
Finding the minimum in an unsorted array is a single left-to-right scan: start with arr[0], then update whenever a smaller value appears. This tutorial covers the pattern, empty-array handling, negatives, a live preview, worked Java examples, edge cases, and complexity.
Smallest value
Return the least element in an array of numbers.
One pass
Track a running minimum while walking the array.
arr[0] first
Seed minVal with the first element, then compare the rest.
No min
Reject empty arrays before scanning.
Sample → 2
Run the classic sample array in the browser.
O(1) space
One pass, constant extra memory, faster than sorting for this task.
Finding the minimum in an unsorted array means returning the smallest value. Start with the first element as the current minimum; whenever you see a smaller number, update it.
After one pass, the running minimum is the answer. The same idea works for all-negative arrays, because the minimum is still the most negative value.
It mirrors finding the maximum with one flipped comparison, a classic interview twin pair for loops and empty-input thinking.
Update whenever x < minVal.
Avoid sentinel values that break negatives.
Throw or validate before indexing.
Do not sort when you only need the min.
In short: if the array is non-empty, set minVal = arr[0], then for each later value update when smaller.
Given a non-empty array of integers, return the smallest value using one linear scan.
// [12, 5, 7, 3, 2, 8, 10] -> 2
// minVal starts at 12, then updates to 5, 3, 2 | Item | Type | Description |
|---|---|---|
arr | int[] | Non-empty array of numbers. |
| Return / print | int / text | The smallest value in the array. |
function findMin(arr):
if arr is empty:
error
minVal <- arr[0]
for each value from second element:
if value < minVal:
minVal <- value
return minVal | Method | Idea | Notes |
|---|---|---|
| Linear scan | Running minimum | Interview default — O(n), O(1) space |
| Library helper | stream().min() | Fine in apps; show loops in interviews |
| Sort then take first | Sort ascending | Slower — avoid when only min is needed |
| Goal | Pattern |
|---|---|
| Seed | minVal = arr[0] |
| Update | if (arr[i] < minVal) minVal = arr[i]; |
| Empty guard | if (arr.length == 0) throw ... |
| Loop start | for (int i = 1; i < arr.length; i++) |
| Track index | Keep minIndex when updating |
| Library helper | Arrays.stream(arr).min() after explaining the scan |
Same answer — different costs and interview signals.
running minThis page — clear O(n) interview style
Arrays.stream(arr).min()Production shortcut after you can explain it
Arrays.sort(arr)Overkill — usually O(n log n)
mention emptyDefine behavior for empty arrays up front
Reach for a running minimum whenever you need the smallest value in one pass.
Loops, comparisons, and empty-array discussion.
Same pattern; only the comparison flips.
Lowest score, coldest reading, cheapest price.
Practice less-than updates and negatives.
If you need the order of all elements, sort instead.
Key benefit: one short loop that locks in running state, empty guards, and O(n) reasoning, the twin of array maximum.
Uses the same sample array as Example 1: 12, 5, 7, 3, 2, 8, 10.
Three complete Java programs: classic scan to 2, all-negative array, and min-with-index tracking. Click View Output to reveal sample console results.
A reusable helper and a mixed positive sample.
Same sample values as the reference flow; output is 2.
public class FindMinArray {
static int findMin(int[] arr) {
if (arr.length == 0) {
throw new IllegalArgumentException("Array must contain at least one element.");
}
int minVal = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] < minVal) {
minVal = arr[i];
}
}
return minVal;
}
public static void main(String[] args) {
int[] array = { 12, 5, 7, 3, 2, 8, 10 };
int minValue = findMin(array);
System.out.println("Minimum value in the array: " + minValue);
}
} The method throws a clear error for empty input and uses one simple pass for normal arrays. Running min starts at 12, then updates to 5, 3, and finally 2.
The minimum is the smallest value, even when every element is negative.
Smallest means most negative, so the answer is -9 here.
public class FindMinNegativeArray {
static int findMin(int[] arr) {
if (arr.length == 0) {
throw new IllegalArgumentException("Array must contain at least one element.");
}
int minVal = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] < minVal) {
minVal = arr[i];
}
}
return minVal;
}
public static void main(String[] args) {
int[] negatives = { -9, -3, -1, -7 };
System.out.println("Minimum (most negative): " + findMin(negatives));
}
} Seeding with arr[0], not a large sentinel, keeps the logic simple. Here -9 is smaller than -7, -3, and -1.
Common follow-up: return both the minimum and its first index.
Updates both value and index whenever a strictly smaller element appears.
public class FindMinWithIndex {
static int[] findMinWithIndex(int[] arr) {
if (arr.length == 0) {
throw new IllegalArgumentException("Array must contain at least one element.");
}
int minVal = arr[0];
int minIndex = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[i] < minVal) {
minVal = arr[i];
minIndex = i;
}
}
return new int[] { minVal, minIndex };
}
public static void main(String[] args) {
int[] array = { 12, 5, 7, 3, 2, 8, 10 };
int[] result = findMinWithIndex(array);
System.out.println("Minimum " + result[0] + " found at index " + result[1]);
}
} Strict < keeps the first occurrence if duplicates exist. Use <= only if you intentionally want the last index of the minimum.
If the array is empty, throw an error because no minimum exists.
Set minVal = arr[0] as the first candidate.
For each later element, replace minVal when smaller.
Return the final running minimum.
Trace the running minimum for [12, 5, 7, 3, 2, 8, 10].
| Step | See | minVal |
|---|---|---|
| Start | 12 | 12 |
| Next | 5 | 5 |
| Next | 7 | 5 (unchanged) |
| Next | 3 | 3 |
| Next | 2 | 2 |
| Next | 8, 10 | 2 (unchanged) |
Final answer: 2 — matching Example 1.
Where finding an array minimum shows up beyond the interview prompt.
One-pass loops and empty-array talk.
Example: write findMin(arr).
Same scan; flip > to <.
Example: twin of findMax.
Lowest score or coldest reading in a series.
Example: min temperature today.
Show most-negative is the minimum.
Example: min of { -9, -1 }.
State O(n) vs sorting in interviews.
Example: one pass is enough.
Return the position of the minimum too.
Example: Example 3 pattern.
Pro Tip: open with “empty check, seed arr[0], one pass with <” before writing code.
Why the linear-scan approach works well in interviews.
O(n) time and O(1) extra space for unsorted input.
Dry-run a short array and watch minVal update.
Seeding with arr[0] works for all-negative arrays.
Track index, or flip to maximum with one comparison change.
Pro Tip: lead with the manual scan; mention library helpers only as a production aside.
Small habits that keep min-finding solutions interview-ready.
Throw before reading arr[0].
Do not initialize to a huge constant blindly.
Keeps the first index if you also track position.
Sorting is slower when you only need the min.
One pass, constant extra memory.
Pro Tip: dry-run 12 → 5 → 3 → 2 aloud — if that matches, your update logic is correct.
Mistakes that commonly break min-finding solutions.
Reading arr[0] when the array is empty.
→ Guard with if (arr.length == 0) first.
Copying max code but forgetting to flip > to <.
→ Minimum uses less-than updates.
Sorting just to take the first element.
→ Use one O(n) scan.
Starting the loop at 0 incorrectly.
→ Loop from index 1 after seeding the minimum.
Returning the least negative when asked for maximum, or vice versa.
→ Clarify: minimum is farthest left on the number line.
Handle these before claiming the scan is complete.
There is no minimum; validate before reading the first element.
The minimum is that one value.
Minimum is the most negative value, such as -9.
Value is unchanged; index depends on < vs <=.
Same scan, no special case needed.
Use long[] if values may exceed int range.
Handy follow-ups interviewers sometimes ask.
> instead of <.Try these variations to lock in the pattern.
{12, 5, 7, 3, 2, 8, 10}findMin(new int[0])O(n) time and O(1) extra space.Quick Takeaway: guard empty, seed with arr[0], update on <, return in O(n) time.
| Approach | Time | Extra space |
|---|---|---|
| Single scan | O(n) | O(1) |
| Library helper | O(n) | O(1) |
| Sort then take first | O(n log n) | depends on sort |
For unsorted input, a single scan is the standard interview answer.
Finding the minimum is a one-pass running minimum: guard empty arrays, seed with arr[0], and update on smaller values. The same pattern works for negatives and extends cleanly to tracking the index.
Practice the three examples above, then continue to displaying a multiplication table.
Empty check first, then minVal = arr[0], update when x < minVal.
arr[0]> when you meant <Find the smallest value the interview-friendly way.
Running min
PatternStart at arr[0]
InitGuard first
SafetyMost negative wins
EdgeO(n) / O(1)
AnalysisFinding the smallest value in an unsorted array takes a single left-to-right pass: O(n) time and O(1) extra memory. In the worst case, any unseen element could still be the new minimum.
Learn how to use nested loops to display a multiplication table in Java.
8 people found this page helpful