Skip to content

Commit c026b39

Browse files
feat(array): add Dutch National Flag algorithm
Co-Authored-By: Federico Marcos <[email protected]>
1 parent 1ee7c81 commit c026b39

File tree

4 files changed

+80
-0
lines changed

4 files changed

+80
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func dutchNationalFlag(arr []int) {
6+
low, mid, high := 0, 0, len(arr)-1
7+
8+
for mid <= high {
9+
switch arr[mid] {
10+
case 0:
11+
arr[low], arr[mid] = arr[mid], arr[low]
12+
low++
13+
mid++
14+
case 1:
15+
mid++
16+
case 2:
17+
arr[high], arr[mid] = arr[mid], arr[high]
18+
high--
19+
}
20+
}
21+
}
22+
23+
func main() {
24+
arr := []int{2, 0, 1, 2, 1, 0}
25+
dutchNationalFlag(arr)
26+
fmt.Println(arr) // Should print: [0 0 1 1 2 2]
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
function dutchNationalFlag(arr) {
2+
let low = 0, mid = 0, high = arr.length - 1;
3+
4+
while (mid <= high) {
5+
if (arr[mid] === 0) {
6+
[arr[low], arr[mid]] = [arr[mid], arr[low]];
7+
low++;
8+
mid++;
9+
} else if (arr[mid] === 1) {
10+
mid++;
11+
} else { // arr[mid] === 2
12+
[arr[high], arr[mid]] = [arr[mid], arr[high]];
13+
high--;
14+
}
15+
}
16+
}
17+
18+
const arr = [2, 0, 1, 2, 1, 0];
19+
dutchNationalFlag(arr);
20+
console.log(arr); // Should print: [0, 0, 1, 1, 2, 2]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Given an array containing only 0s, 1s, and 2s, sort the array in-place in a single pass.
2+
3+
This is also known as the Dutch National Flag problem, named after the Dutch flag's three colors.
4+
5+
Example:
6+
Input: [2, 0, 1, 2, 1, 0]
7+
Output: [0, 0, 1, 1, 2, 2]
8+
9+
Note:
10+
- The array only contains 0s, 1s, and 2s
11+
- Must sort in-place with O(n) time complexity and O(1) space complexity
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from typing import List
2+
3+
4+
def dutch_national_flag(arr: List[int]) -> None:
5+
low, mid, high = 0, 0, len(arr) - 1
6+
7+
while mid <= high:
8+
if arr[mid] == 0:
9+
arr[low], arr[mid] = arr[mid], arr[low]
10+
low += 1
11+
mid += 1
12+
elif arr[mid] == 1:
13+
mid += 1
14+
else: # arr[mid] == 2
15+
arr[high], arr[mid] = arr[mid], arr[high]
16+
high -= 1
17+
18+
19+
if __name__ == "__main__":
20+
arr = [2, 0, 1, 2, 1, 0]
21+
dutch_national_flag(arr)
22+
print(arr) # Should print: [0, 0, 1, 1, 2, 2]

0 commit comments

Comments
 (0)