瀏覽代碼

letcode 3sum题解决

tangs 5 年之前
父節點
當前提交
f17e399ce9
共有 1 個文件被更改,包括 55 次插入0 次删除
  1. 55 0
      threeSum/main.go

+ 55 - 0
threeSum/main.go

@@ -0,0 +1,55 @@
+package main
+
+// 排序+双指针法
+import (
+	"fmt"
+	"sort"
+)
+
+func main() {
+	var nums []int
+
+	nums = []int{-1, 0, 1, 2, -1, -4}
+	fmt.Println(threeSum(nums))
+
+	nums = []int{3, 0, -2, -1, 1, 2}
+	fmt.Println(threeSum(nums))
+}
+
+func threeSum(nums []int) [][]int {
+	var ret = [][]int{}
+	sort.Ints(nums)
+	for i := 0; i < len(nums); i++ {
+		if i > 0 && nums[i] == nums[i-1] {
+			continue
+		}
+		var j, k = i + 1, len(nums) - 1
+		for j < k {
+			var num = nums[i] + nums[j] + nums[k]
+			if num == 0 {
+				ret = append(ret, []int{nums[i], nums[j], nums[k]})
+				for j < k {
+					j++
+					if nums[j] != nums[j-1] {
+						break
+					}
+				}
+
+				for k > j {
+					k--
+					if nums[k] != nums[k+1] {
+						break
+					}
+				}
+			} else {
+				if num > 0 {
+					k--
+				}
+				if num < 0 {
+					j++
+				}
+			}
+		}
+	}
+	return ret
+}