diff --git a/array/dutch_national_flag/dutch_national_flag.go b/array/dutch_national_flag/dutch_national_flag.go new file mode 100644 index 0000000..2b5d92a --- /dev/null +++ b/array/dutch_national_flag/dutch_national_flag.go @@ -0,0 +1,27 @@ +package main + +import "fmt" + +func dutchNationalFlag(arr []int) { + low, mid, high := 0, 0, len(arr)-1 + + for mid <= high { + switch arr[mid] { + case 0: + arr[low], arr[mid] = arr[mid], arr[low] + low++ + mid++ + case 1: + mid++ + case 2: + arr[high], arr[mid] = arr[mid], arr[high] + high-- + } + } +} + +func main() { + arr := []int{2, 0, 1, 2, 1, 0} + dutchNationalFlag(arr) + fmt.Println(arr) // Should print: [0 0 1 1 2 2] +} diff --git a/array/dutch_national_flag/dutch_national_flag.js b/array/dutch_national_flag/dutch_national_flag.js new file mode 100644 index 0000000..ace56bf --- /dev/null +++ b/array/dutch_national_flag/dutch_national_flag.js @@ -0,0 +1,20 @@ +function dutchNationalFlag(arr) { + let low = 0, mid = 0, high = arr.length - 1; + + while (mid <= high) { + if (arr[mid] === 0) { + [arr[low], arr[mid]] = [arr[mid], arr[low]]; + low++; + mid++; + } else if (arr[mid] === 1) { + mid++; + } else { // arr[mid] === 2 + [arr[high], arr[mid]] = [arr[mid], arr[high]]; + high--; + } + } +} + +const arr = [2, 0, 1, 2, 1, 0]; +dutchNationalFlag(arr); +console.log(arr); // Should print: [0, 0, 1, 1, 2, 2] diff --git a/array/dutch_national_flag/dutch_national_flag.md b/array/dutch_national_flag/dutch_national_flag.md new file mode 100644 index 0000000..2438039 --- /dev/null +++ b/array/dutch_national_flag/dutch_national_flag.md @@ -0,0 +1,11 @@ +Given an array containing only 0s, 1s, and 2s, sort the array in-place in a single pass. + +This is also known as the Dutch National Flag problem, named after the Dutch flag's three colors. + +Example: + Input: [2, 0, 1, 2, 1, 0] + Output: [0, 0, 1, 1, 2, 2] + +Note: + - The array only contains 0s, 1s, and 2s + - Must sort in-place with O(n) time complexity and O(1) space complexity diff --git a/array/dutch_national_flag/dutch_national_flag.py b/array/dutch_national_flag/dutch_national_flag.py new file mode 100644 index 0000000..23ac8a7 --- /dev/null +++ b/array/dutch_national_flag/dutch_national_flag.py @@ -0,0 +1,22 @@ +from typing import List + + +def dutch_national_flag(arr: List[int]) -> None: + low, mid, high = 0, 0, len(arr) - 1 + + while mid <= high: + if arr[mid] == 0: + arr[low], arr[mid] = arr[mid], arr[low] + low += 1 + mid += 1 + elif arr[mid] == 1: + mid += 1 + else: # arr[mid] == 2 + arr[high], arr[mid] = arr[mid], arr[high] + high -= 1 + + +if __name__ == "__main__": + arr = [2, 0, 1, 2, 1, 0] + dutch_national_flag(arr) + print(arr) # Should print: [0, 0, 1, 1, 2, 2]