From 7f4947f527574432590d7667ffcb05365322c172 Mon Sep 17 00:00:00 2001 From: zouxinyao Date: Sun, 25 Jul 2021 13:40:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B1=82=E5=92=8C=E9=97=AE=E9=A2=98=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0Go=E8=AF=AD=E8=A8=80=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- animation-simulation/求和问题/三数之和.md | 47 ++++++++++++++++++++ animation-simulation/求和问题/两数之和.md | 15 +++++++ animation-simulation/求和问题/四数之和.md | 54 ++++++++++++++++++++++- 3 files changed, 115 insertions(+), 1 deletion(-) diff --git a/animation-simulation/求和问题/三数之和.md b/animation-simulation/求和问题/三数之和.md index c2dbffd..4d1769f 100644 --- a/animation-simulation/求和问题/三数之和.md +++ b/animation-simulation/求和问题/三数之和.md @@ -167,3 +167,50 @@ class Solution { } ``` +Go Code: + +```go +func threeSum(nums []int) [][]int { + res := [][]int{} + length := len(nums) + if length < 3 { + return res + } + + sort.Ints(nums) + for i := 0; i < length - 2; i++ { + // 去重 + if i != 0 && nums[i] == nums[i - 1] { + continue + } + l, r := i + 1, length - 1 + for l < r { + /* + // 下面两个for循环的去重也可以用下面的代码替换 + if l != i + 1 && nums[l] == nums[l - 1] { + l++ + continue + } + */ + if nums[i] + nums[l] + nums[r] == 0 { + res = append(res, []int{nums[i], nums[l], nums[r]}) + for l < r && nums[l] == nums[l + 1] { + l++ + } + for l < r && nums[r] == nums[r - 1] { + r-- + } + l++ + r-- + } else if nums[i] + nums[l] + nums[r] < 0 { + l++ + } else { + r-- + } + + } + } + return res +} +``` + diff --git a/animation-simulation/求和问题/两数之和.md b/animation-simulation/求和问题/两数之和.md index e546bc9..f5f91e6 100644 --- a/animation-simulation/求和问题/两数之和.md +++ b/animation-simulation/求和问题/两数之和.md @@ -54,6 +54,21 @@ class Solution { } ``` +Go Code: + +```go +func twoSum(nums []int, target int) []int { + m := make(map[int]int) + for i, num := range nums { + if v, ok := m[target - num]; ok { + return []int{v, i} + } + m[num] = i + } + return []int{} +} +``` + ### 双指针(暴力)法 diff --git a/animation-simulation/求和问题/四数之和.md b/animation-simulation/求和问题/四数之和.md index b9f550d..dc9b010 100644 --- a/animation-simulation/求和问题/四数之和.md +++ b/animation-simulation/求和问题/四数之和.md @@ -96,7 +96,59 @@ class Solution { } ``` - +Go Code: + +```go +func fourSum(nums []int, target int) [][]int { + res := [][]int{} + length := len(nums) + if length < 4 { + return res + } + + sort.Ints(nums) + for i := 0; i < length - 3; i++ { + // 去重 + if i != 0 && nums[i] == nums[i - 1] { + continue + } + for j := i + 1; j < length - 2; j++ { + // 去重 + if j != i + 1 && nums[j] == nums[j - 1] { + continue + } + l, r := j + 1, length - 1 + for l < r { + /* + // 下面两个for循环的去重也可以用下面的代码替换 + if l != i + 1 && nums[l] == nums[l - 1] { + l++ + continue + } + */ + sum := nums[i] + nums[j] + nums[l] + nums[r] + if sum == target { + res = append(res, []int{nums[i], nums[j], nums[l], nums[r]}) + for l < r && nums[l] == nums[l + 1] { + l++ + } + for l < r && nums[r] == nums[r - 1] { + r-- + } + l++ + r-- + } else if sum < target { + l++ + } else { + r-- + } + + } + } + } + return res +} +```