diff --git a/README.md b/README.md
index 138f4fe..bd04a97 100644
--- a/README.md
+++ b/README.md
@@ -27,6 +27,7 @@ continually updating π.
* [209. Minimum Size Subarray Sum](./src/0209_minimum_size_subarray_sum/minimum_size_subarray_sum.go) *`sliding window`*
* [215. Kth Largest Element in an Array](./src/0215_kth_largest_element_in_an_array/kthleiaa.go) *`sort`*
* [217. Contains Duplicate](src/0217_contains_duplicate/contains_duplicate.go) *`map`*
+* [219. Contains Duplicate II](src/0219_contains_duplicate_2/contains_duplicate_2.go) *`map`*
* [283. Move Zeroes(solution1)](./src/0283_move_zeroes/move_zeroes.go) *`sliding window`*
* [283. Move Zeroes(solution2)](./src/0283_move_zeroes/move_zeroes2.go) *`sliding window`*
* [303. Range Sum Query - Immutable](src/0303_range_sum_query/rsqim.go)
diff --git a/src/0219_contains_duplicate_2/contains_duplicate_2.go b/src/0219_contains_duplicate_2/contains_duplicate_2.go
new file mode 100644
index 0000000..40746e9
--- /dev/null
+++ b/src/0219_contains_duplicate_2/contains_duplicate_2.go
@@ -0,0 +1,27 @@
+/*
+219. Contains Duplicate II
+https://leetcode.com/problems/contains-duplicate-ii/
+
+Given an array of integers and an integer k,
+find out whether there are two distinct indices i and j in the array
+such that nums[i] = nums[j] and the absolute difference between i and j is at most k.
+*/
+// time: 2019εΉ΄01ζ07ζ₯
+
+package cond
+
+// using hash table
+// time complexity: O(n)
+// space complexity: O(n)
+func containsNearbyDuplicate(nums []int, k int) bool {
+ record := make(map[int]int, len(nums))
+ for i, v := range nums {
+ if j, ok := record[v]; ok {
+ if i-j <= k { + return true + } + } + record[v] = i + } + return false +} diff --git a/src/0219_contains_duplicate_2/contains_duplicate_2_test.go b/src/0219_contains_duplicate_2/contains_duplicate_2_test.go new file mode 100644 index 0000000..53e4630 --- /dev/null +++ b/src/0219_contains_duplicate_2/contains_duplicate_2_test.go @@ -0,0 +1,19 @@ +package cond + +import "testing" + +func TestContainsNearbyDuplicate(t *testing.T) { + testCases := [][]int{ + {1, 2, 3, 1}, + {1, 0, 1, 1}, + {1, 2, 3, 1, 2, 3}, + } + ks := []int{3, 1, 2} + expected := []bool{true, true, false} + + for index, nums := range testCases { + if res := containsNearbyDuplicate(nums, ks[index]); res != expected[index] { + t.Errorf("expected %t, got %t", expected[index], res) + } + } +} diff --git a/src/README.md b/src/README.md index fac16ad..15050d4 100644 --- a/src/README.md +++ b/src/README.md @@ -69,6 +69,7 @@ |0209|[Minimum Size Subarray Sum](./0209_minimum_size_subarray_sum/minimum_size_subarray_sum.go)|Medium|*`sliding window`*| |0215|[215. Kth Largest Element in an Array](0215_kth_largest_element_in_an_array/kthleiaa.go)|Medium|*`sort`*| |0217|[217. Contains Duplicate](0217_contains_duplicate/contains_duplicate.go)|Easy|*`map`*| +|0219|[219. Contains Duplicate II](0219_contains_duplicate_2/contains_duplicate_2.go)|Easy|*`map`*| |0226|[Invert Binary Tree](./0226_invert_binary_tree/invert_binary_tree.go)|Easy|*`recursion; `* *`binary tree`*| |0283|[Move Zeroes(solution1)](./0283_move_zeroes/move_zeroes.go)
[Move Zeroes(solution2)](./0283_move_zeroes/move_zeroes2.go)|Easy|*`array`*|
|0300|[Longest Increasing Subsequence](./0300_longest_increasing_subsequence/lis.go)|Medium|*`dp`*|