diff --git a/go/Two Pointers/pairSumSorted.go b/go/Two Pointers/pairSumSorted.go new file mode 100644 index 0000000..48e6776 --- /dev/null +++ b/go/Two Pointers/pairSumSorted.go @@ -0,0 +1,19 @@ +package main + +func pairSumSorted(nums []int, target int) []int { + n := len(nums) + left, right := 0, n-1 + + for left < right { + sum := nums[left] + nums[right] + if sum < target { + left++ + } else if sum > target { + right-- + } else { + return []int{left, right} + } + } + + return []int{} +} diff --git a/go/Two Pointers/pairSumSortedBruteForce.go b/go/Two Pointers/pairSumSortedBruteForce.go new file mode 100644 index 0000000..053c581 --- /dev/null +++ b/go/Two Pointers/pairSumSortedBruteForce.go @@ -0,0 +1,15 @@ +package main + +func pairSumSortedBruteForce(nums []int, target int) []int { + n := len(nums) + + for i := 0; i < n; i++ { + for j := i + 1; j < n; j++ { + if nums[i]+nums[j] == target { + return []int{i, j} + } + } + } + + return []int{} +} diff --git a/go/Two Pointers/tripletSum.go b/go/Two Pointers/tripletSum.go new file mode 100644 index 0000000..36f21b1 --- /dev/null +++ b/go/Two Pointers/tripletSum.go @@ -0,0 +1,61 @@ +package main + +import ( + "sort" +) + +func tripletSum(nums []int) [][]int { + triplets := [][]int{} + sort.Ints(nums) + + for i := range nums { + if i < 0 { + break + } + + if i > 0 && nums[i] == nums[i-1] { + continue + } + + pairs := pairSumSortedAllPairs(nums, i+1, -nums[i]) + if len(pairs) > 0 { + + pairs = append(pairs, 0) + copy(pairs[1:], pairs) + pairs[0] = nums[i] + + triplets = append(triplets, pairs) + } + + } + + return triplets +} + +func pairSumSortedAllPairs(nums []int, start, target int) []int { + + pairs := []int{} + n := len(nums) + left := start + right := n - 1 + + for left < right { + sum := nums[left] + nums[right] + + if sum == target { + pairs = append(pairs, nums[left], nums[right]) + left++ + + for left < right && nums[left] == nums[left-1] { + left++ + } + } else if sum < target { + left++ + } else { + right-- + } + + } + + return pairs +} diff --git a/go/Two Pointers/tripletSumBruteForce.go b/go/Two Pointers/tripletSumBruteForce.go new file mode 100644 index 0000000..999f0ae --- /dev/null +++ b/go/Two Pointers/tripletSumBruteForce.go @@ -0,0 +1,26 @@ +package main + +import ( + "sort" +) + +func tripletSumBruteForce(nums []int) [][]int { + n := len(nums) + triplets := [][]int{} + index := 0 + + for i := 0; i < n; i++ { + for j := i + 1; j < n; j++ { + for k := j + 1; k < n; k++ { + if nums[i]+nums[j]+nums[k] == 0 { + triplet := []int{nums[i], nums[j], nums[k]} + sort.Ints(triplet) + triplets = append(triplets, triplet) + index++ + } + } + } + } + + return triplets +}