add new solutions

This commit is contained in:
kanna5 2025-12-23 17:59:03 +09:00
parent ccb8b5673b
commit 58527849b2
Signed by: kkyy
GPG key ID: 06332F3965E9B0CF
6 changed files with 202 additions and 0 deletions

View file

@ -0,0 +1,65 @@
package q15
import "slices"
func sortAndDedup3(nums []int) []int {
slices.Sort(nums)
head, dup := 0, 0
for i := 1; i < len(nums); i++ {
if nums[i] == nums[head] {
dup++
} else {
dup = 0
}
if dup < 3 {
head++
nums[head] = nums[i]
}
}
return nums[:head+1]
}
func threeSum(nums []int) [][]int {
nums = sortAndDedup3(nums)
ret := [][]int{}
appendResult := func(a, b, c int) {
triplet := []int{a, b, c}
if len(ret) > 0 && slices.Equal(triplet, ret[len(ret)-1]) {
return
}
ret = append(ret, triplet)
}
for i := 0; i < len(nums)-2; i++ {
if nums[i] > 0 {
break
}
wants := -nums[i]
l, r := i+1, len(nums)-1
for l < r {
for l < r && nums[l]+nums[r] > wants {
r--
}
if l < r && nums[l]+nums[r] == wants {
appendResult(nums[i], nums[l], nums[r])
r--
}
for l < r && nums[l]+nums[r] < wants {
l++
}
if l < r && nums[l]+nums[r] == wants {
appendResult(nums[i], nums[l], nums[r])
l++
}
}
// skip same numbers
for ; i < len(nums)-2 && nums[i] == nums[i+1]; i++ {
}
}
return ret
}
var _ = threeSum

View file

@ -0,0 +1,32 @@
package q20
func isValid(s string) bool {
stack := make([]byte, 0, len(s)/2)
for i := range len(s) {
switch s[i] {
case '(', '[', '{':
stack = append(stack, s[i])
case ')':
if len(stack) == 0 || stack[len(stack)-1] != '(' {
return false
}
stack = stack[:len(stack)-1]
case ']':
if len(stack) == 0 || stack[len(stack)-1] != '[' {
return false
}
stack = stack[:len(stack)-1]
case '}':
if len(stack) == 0 || stack[len(stack)-1] != '{' {
return false
}
stack = stack[:len(stack)-1]
}
}
return len(stack) == 0
}
var _ = isValid