diff --git a/problems/smallest-range-i/smallest_range_i.go b/problems/smallest-range-i/smallest_range_i.go index 374be90b9..3e1a88f50 100644 --- a/problems/smallest-range-i/smallest_range_i.go +++ b/problems/smallest-range-i/smallest_range_i.go @@ -1 +1,17 @@ package smallest_range_i + +func smallestRangeI(A []int, K int) int { + min, max := A[0], A[0] + for _, v := range A { + if v < min { + min = v + } else if v > max { + max = v + } + } + ans := max - min - 2*K + if ans < 0 { + return 0 + } + return ans +} diff --git a/problems/smallest-range-i/smallest_range_i_test.go b/problems/smallest-range-i/smallest_range_i_test.go index 374be90b9..0b0a637cc 100644 --- a/problems/smallest-range-i/smallest_range_i_test.go +++ b/problems/smallest-range-i/smallest_range_i_test.go @@ -1 +1,45 @@ package smallest_range_i + +import "testing" + +type caseType struct { + input []int + k int + expected int +} + +func TestSmallestRangeI(t *testing.T) { + tests := [...]caseType{ + { + input: []int{1}, + k: 0, + expected: 0, + }, + { + input: []int{0, 10}, + k: 2, + expected: 6, + }, + { + input: []int{1, 3, 6}, + k: 3, + expected: 0, + }, + { + input: []int{1, 3, 5, 7, 9}, + k: 1, + expected: 6, + }, + { + input: []int{18, 16, 12, 7, 9, 3, 5}, + k: 6, + expected: 3, + }, + } + for _, tc := range tests { + output := smallestRangeI(tc.input, tc.k) + if output != tc.expected { + t.Fatalf("input: %v, output: %v, expected: %v", tc.input, output, tc.expected) + } + } +}