Skip to content

Commit c5d9e51

Browse files
committed
Add problem 75 - Sort Colors
1 parent acd0ffe commit c5d9e51

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

problems/array/sort_colors.go

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package array
2+
3+
func SortColors(nums []int) []int {
4+
// Pointers to keep track of 0s, 1s and 2s
5+
left, middle, right := 0, 0, len(nums)-1
6+
// Process elements in the array
7+
for middle <= right {
8+
if nums[middle] == 0 {
9+
nums[middle], nums[left] = nums[left], nums[middle]
10+
left += 1
11+
middle += 1
12+
} else if nums[middle] == 1 {
13+
middle += 1
14+
} else {
15+
nums[middle], nums[right] = nums[right], nums[middle]
16+
right -= 1
17+
}
18+
}
19+
return nums
20+
}

tests/array/sort_colors_test.go

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package array_test
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
7+
"github.com/anirudhology/leetcode-go/problems/array"
8+
)
9+
10+
func TestSortColors_AllZeros(t *testing.T) {
11+
nums := []int{0, 0, 0}
12+
expected := []int{0, 0, 0}
13+
result := array.SortColors(nums)
14+
if !reflect.DeepEqual(result, expected) {
15+
t.Errorf("Expected %v but got %v", expected, result)
16+
}
17+
}
18+
19+
func TestSortColors_AllOnes(t *testing.T) {
20+
nums := []int{1, 1, 1}
21+
expected := []int{1, 1, 1}
22+
result := array.SortColors(nums)
23+
if !reflect.DeepEqual(result, expected) {
24+
t.Errorf("Expected %v but got %v", expected, result)
25+
}
26+
}
27+
28+
func TestSortColors_AllTwos(t *testing.T) {
29+
nums := []int{2, 2, 2}
30+
expected := []int{2, 2, 2}
31+
result := array.SortColors(nums)
32+
if !reflect.DeepEqual(result, expected) {
33+
t.Errorf("Expected %v but got %v", expected, result)
34+
}
35+
}
36+
37+
func TestSortColors_Mixed(t *testing.T) {
38+
nums := []int{2, 0, 2, 1, 1, 0}
39+
expected := []int{0, 0, 1, 1, 2, 2}
40+
result := array.SortColors(nums)
41+
if !reflect.DeepEqual(result, expected) {
42+
t.Errorf("Expected %v but got %v", expected, result)
43+
}
44+
}
45+
46+
func TestSortColors_EmptyArray(t *testing.T) {
47+
nums := []int{}
48+
expected := []int{}
49+
result := array.SortColors(nums)
50+
if !reflect.DeepEqual(result, expected) {
51+
t.Errorf("Expected %v but got %v", expected, result)
52+
}
53+
}
54+
55+
func TestSortColors_SingleElement(t *testing.T) {
56+
nums := []int{1}
57+
expected := []int{1}
58+
result := array.SortColors(nums)
59+
if !reflect.DeepEqual(result, expected) {
60+
t.Errorf("Expected %v but got %v", expected, result)
61+
}
62+
}
63+
64+
func TestSortColors_AlreadySorted(t *testing.T) {
65+
nums := []int{0, 1, 2}
66+
expected := []int{0, 1, 2}
67+
result := array.SortColors(nums)
68+
if !reflect.DeepEqual(result, expected) {
69+
t.Errorf("Expected %v but got %v", expected, result)
70+
}
71+
}

0 commit comments

Comments
 (0)