Labeled break and continue in Kotlin - Time & Space Complexity
We want to understand how using labeled break and continue affects the time a program takes to run.
Specifically, we ask: How does the number of steps change as the input grows?
Analyze the time complexity of the following code snippet.
fun searchMatrix(matrix: Array, target: Int) {
outer@ for (row in matrix) {
for (value in row) {
if (value == target) break@outer
if (value > target) continue@outer
}
}
}
This code searches for a target number in a 2D matrix, using labeled break and continue to control loops.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Nested loops over rows and values in the matrix.
- How many times: Outer loop runs for each row, inner loop runs for each value in that row until break or continue.
As the matrix size grows, the loops run more times, but labeled break and continue can stop inner loops early.
| Input Size (n x m) | Approx. Operations |
|---|---|
| 10 x 10 | Up to 100 checks |
| 100 x 100 | Up to 10,000 checks |
| 1000 x 1000 | Up to 1,000,000 checks |
Pattern observation: The number of operations grows roughly with the total number of elements, but early breaks can reduce work.
Time Complexity: O(n * m)
This means the time grows roughly with the total number of elements in the matrix.
[X] Wrong: "Using labeled break or continue makes the loops run faster always."
[OK] Correct: Labeled break and continue only skip some steps but do not change the worst-case number of checks if the target is not found early.
Understanding how labeled break and continue affect loop execution helps you explain control flow clearly and reason about performance in real code.
"What if we removed the labeled continue and used only break? How would the time complexity change?"
Practice
break@label statement do in Kotlin nested loops?Solution
Step 1: Understand labeled break usage
Thebreak@labelstatement is used to exit a specific loop marked by the label, not just the innermost loop.Step 2: Compare with other options
Options B and D describe continue or pause behavior, which is incorrect. It restarts the entire program from the beginning. is unrelated to loop control.Final Answer:
It stops the loop identified by the label immediately. -> Option AQuick Check:
break@label stops labeled loop [OK]
- Confusing break@label with continue@label
- Thinking break@label only stops innermost loop
- Assuming break@label pauses instead of stops
outerLoop in Kotlin?Solution
Step 1: Recall Kotlin labeled continue syntax
Kotlin uses the@symbol to refer to labels with break or continue, so the correct syntax iscontinue@label.Step 2: Eliminate incorrect options
Options B, C, and D use invalid syntax for labels in Kotlin.Final Answer:
continue@outerLoop -> Option DQuick Check:
Use continue@label to continue labeled loop [OK]
- Omitting @ symbol before label
- Using parentheses or other symbols with label
- Confusing syntax with other languages
outer@ for (i in 1..3) {
inner@ for (j in 1..3) {
if (i == 2 && j == 2) break@outer
print("$i$j ")
}
}Solution
Step 1: Trace nested loops and break condition
The outer loop runs i=1 to 3, inner loop j=1 to 3. When i=2 and j=2,break@outerstops the outer loop entirely.Step 2: List printed values before break
For i=1, j=1..3 prints 11 12 13. For i=2, j=1 prints 21, then at j=2 break@outer stops all loops. So output is "11 12 13 21".Final Answer:
11 12 13 21 -> Option BQuick Check:
break@outer stops all loops at i=2,j=2 [OK]
- Assuming break@outer only stops inner loop
- Including values after break condition
- Confusing break@outer with continue@outer
outer@ for (i in 1..2) {
for (j in 1..2) {
if (i == 1) continue outer
println("i=$i, j=$j")
}
}Solution
Step 1: Check labeled continue syntax
Kotlin requires the @ symbol when using labels with break or continue, so it must becontinue@outer.Step 2: Verify label definition and usage
The label 'outer' is correctly defined, so Label 'outer' is not defined. is wrong. Using continue with label without @ causes syntax error.Final Answer:
continue@outer should be used instead of continue outer. -> Option AQuick Check:
Use continue@label syntax to avoid errors [OK]
- Omitting @ symbol in labeled continue
- Thinking label must be on inner loop
- Assuming no error when syntax is wrong
outer and inner, how can you skip only the current iteration of the outer loop when a condition in the inner loop is met?Solution
Step 1: Understand labeled continue effect
Usingcontinue@outerskips the current iteration of the outer loop, moving to the next iteration of outer.Step 2: Compare with break and unlabeled continue
break@outerwould exit the outer loop entirely, not just skip iteration. Unlabeled continue affects only inner loop.Final Answer:
Use continue@outer inside inner loop. -> Option CQuick Check:
continue@outer skips outer loop iteration [OK]
- Using break@outer instead of continue@outer
- Using unlabeled continue to skip outer loop
- Confusing break and continue effects
Ready to prove it?
Pass the test and this pattern moves unknown
