diff --git a/3sum/youngDaLee.go b/3sum/youngDaLee.go new file mode 100644 index 0000000000..ee83eed24c --- /dev/null +++ b/3sum/youngDaLee.go @@ -0,0 +1,51 @@ +package youngDaLee + +import ( + "fmt" + "slices" +) + +func threeSum(nums []int) [][]int { + // sort nums + slices.Sort(nums) + + // unique-ify nums + uniqueKeys := make(map[string]bool) + + var result [][]int + left := 0 + for left < len(nums)-2 { + // init pivot, right + pivot := left + 1 + right := len(nums) - 1 + + for pivot < right { + sum := nums[left] + nums[pivot] + nums[right] + unikeyKey := fmt.Sprintf("%d%d%d", nums[left], nums[pivot], nums[right]) + if sum == 0 { + if _, ok := uniqueKeys[unikeyKey]; !ok { + uniqueKeys[unikeyKey] = true + result = append(result, []int{nums[left], nums[pivot], nums[right]}) + } + for pivot < right-1 && nums[pivot] == nums[pivot+1] { + pivot += 1 + } + for pivot < right-1 && nums[right] == nums[right-1] { + right -= 1 + } + pivot += 1 + right -= 1 + } else if sum < 0 { + pivot += 1 + } else if sum > 0 { + right -= 1 + } + } + + left += 1 + for left < len(nums)-2 && nums[left] == nums[left-1] { + left += 1 + } + } + return result +} diff --git a/validate-binary-search-tree/youngDaLee.go b/validate-binary-search-tree/youngDaLee.go new file mode 100644 index 0000000000..fc1117e5d6 --- /dev/null +++ b/validate-binary-search-tree/youngDaLee.go @@ -0,0 +1,24 @@ +package youngDaLee + +import "math" + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +func isValidBST(root *TreeNode) bool { + return dfs(root, math.MinInt, math.MaxInt) +} + +func dfs(node *TreeNode, min, max int) bool { + if node == nil { + return true + } + if (min < node.Val && node.Val < max) == false { + return false + } + + return dfs(node.Left, min, node.Val) && dfs(node.Right, node.Val, max) +}