diff --git a/.gitignore b/.gitignore index e07ebea..8e6eb4d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ # Editor .vscode/ +.idea/ # mkdocs files site/ diff --git a/codes/go/chapter_computational_complexity/leetcode_two_sum.go b/codes/go/chapter_computational_complexity/leetcode_two_sum.go new file mode 100644 index 0000000..c3c34f9 --- /dev/null +++ b/codes/go/chapter_computational_complexity/leetcode_two_sum.go @@ -0,0 +1,30 @@ +// File: leetcode_two_sum.go +// Created Time: 2022-11-25 +// Author: reanon (793584285@qq.com) + +package chapter_computational_complexity + +// twoSumBruteForce +func twoSumBruteForce(nums []int, target int) []int { + size := len(nums) + for i := 0; i < size-1; i++ { + for j := i + 1; i < size; j++ { + if nums[i]+nums[j] == target { + return []int{i, j} + } + } + } + return nil +} + +// twoSumHashTable +func twoSumHashTable(nums []int, target int) []int { + hashTable := map[int]int{} + for idx, val := range nums { + if preIdx, ok := hashTable[target-val]; ok { + return []int{preIdx, idx} + } + hashTable[val] = idx + } + return nil +} diff --git a/codes/go/chapter_computational_complexity/leetcode_two_sum_test.go b/codes/go/chapter_computational_complexity/leetcode_two_sum_test.go new file mode 100644 index 0000000..9ddf9ea --- /dev/null +++ b/codes/go/chapter_computational_complexity/leetcode_two_sum_test.go @@ -0,0 +1,24 @@ +// File: leetcode_two_sum.go +// Created Time: 2022-11-25 +// Author: reanon (793584285@qq.com) + +package chapter_computational_complexity + +import ( + "testing" +) + +func TestTwoSum(t *testing.T) { + // ======= Test Case ======= + nums := []int{2, 7, 11, 15} + target := 9 + + // ====== Driver Code ====== + // 方法一:暴力解法 + res := twoSumBruteForce(nums, target) + t.Log("brute force:", res) + + // 方法二:哈希表 + res = twoSumHashTable(nums, target) + t.Log("hash table:", res) +} diff --git a/codes/go/go.mod b/codes/go/go.mod new file mode 100644 index 0000000..34f5dac --- /dev/null +++ b/codes/go/go.mod @@ -0,0 +1,3 @@ +module github.com/krahets/hello-algo + +go 1.19 diff --git a/docs/chapter_computational_complexity/space_time_tradeoff.md b/docs/chapter_computational_complexity/space_time_tradeoff.md index 3753f05..0f82f6c 100644 --- a/docs/chapter_computational_complexity/space_time_tradeoff.md +++ b/docs/chapter_computational_complexity/space_time_tradeoff.md @@ -33,7 +33,7 @@ === "C++" ```cpp title="leetcode_two_sum.cpp" - + ``` === "Python" @@ -42,6 +42,24 @@ ``` +=== "Go" + + ```go title="leetcode_two_sum.go" + func twoSum(nums []int, target int) []int { + size := len(nums) + for i := 0; i < size-1; i++ { + for j := i + 1; i < size; j++ { + if nums[i]+nums[j] == target { + return []int{i, j} + } + } + } + return nil + } + ``` + + + ### 方法二:辅助哈希表 时间复杂度 $O(N)$ ,空间复杂度 $O(N)$ ,属于「空间换时间」。 @@ -69,7 +87,7 @@ === "C++" ```cpp title="leetcode_two_sum.cpp" - + ``` === "Python" @@ -77,3 +95,18 @@ ```python title="leetcode_two_sum.py" ``` + +=== "Go" + + ```go title="leetcode_two_sum.go" + func twoSumHashTable(nums []int, target int) []int { + hashTable := map[int]int{} + for idx, val := range nums { + if preIdx, ok := hashTable[target-val]; ok { + return []int{preIdx, idx} + } + hashTable[val] = idx + } + return nil + } + ```