add new solutions
This commit is contained in:
parent
9a10695e8c
commit
ca24d0a56a
30 changed files with 697 additions and 16 deletions
32
solutions/0/q97/solution.go
Normal file
32
solutions/0/q97/solution.go
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
package q97
|
||||||
|
|
||||||
|
func isInterleave(s1 string, s2 string, s3 string) bool {
|
||||||
|
if len(s1)+len(s2) != len(s3) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
possible := make([][]bool, len(s1)+1)
|
||||||
|
for i := range possible {
|
||||||
|
possible[i] = make([]bool, len(s2)+1)
|
||||||
|
}
|
||||||
|
possible[0][0] = true
|
||||||
|
|
||||||
|
for tLen := 1; tLen <= len(s3); tLen++ {
|
||||||
|
c := s3[tLen-1]
|
||||||
|
for len1 := max(0, tLen-len(s2)); len1 <= min(len(s1), tLen); len1++ {
|
||||||
|
len2 := tLen - len1
|
||||||
|
|
||||||
|
if len1 > 0 && s1[len1-1] == c && possible[len1-1][len2] {
|
||||||
|
possible[len1][len2] = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if len2 > 0 && s2[len2-1] == c && possible[len1][len2-1] {
|
||||||
|
possible[len1][len2] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return possible[len(s1)][len(s2)]
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = isInterleave
|
||||||
|
|
@ -1,24 +1,29 @@
|
||||||
package q150
|
package q150
|
||||||
|
|
||||||
func twoSum(numbers []int, target int) []int {
|
import "strconv"
|
||||||
l, r := 0, len(numbers)-1
|
|
||||||
|
|
||||||
for l < r {
|
func evalRPN(tokens []string) int {
|
||||||
for numbers[r]+numbers[l] > target {
|
stack := make([]int, 0, len(tokens)/2)
|
||||||
r--
|
for _, s := range tokens {
|
||||||
}
|
height := len(stack)
|
||||||
if numbers[r]+numbers[l] == target {
|
|
||||||
return []int{l + 1, r + 1}
|
|
||||||
}
|
|
||||||
|
|
||||||
for numbers[r]+numbers[l] < target {
|
switch s {
|
||||||
l++
|
case "+":
|
||||||
}
|
stack[height-2] += stack[height-1]
|
||||||
if numbers[r]+numbers[l] == target {
|
case "-":
|
||||||
return []int{l + 1, r + 1}
|
stack[height-2] -= stack[height-1]
|
||||||
|
case "*":
|
||||||
|
stack[height-2] *= stack[height-1]
|
||||||
|
case "/":
|
||||||
|
stack[height-2] /= stack[height-1]
|
||||||
|
default:
|
||||||
|
num, _ := strconv.ParseInt(s, 10, strconv.IntSize)
|
||||||
|
stack = append(stack, int(num))
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
stack = stack[:height-1]
|
||||||
}
|
}
|
||||||
return []int{} // impossible
|
return stack[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ = twoSum
|
var _ = evalRPN
|
||||||
|
|
|
||||||
24
solutions/1/q167/solution.go
Normal file
24
solutions/1/q167/solution.go
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
package q167
|
||||||
|
|
||||||
|
func twoSum(numbers []int, target int) []int {
|
||||||
|
l, r := 0, len(numbers)-1
|
||||||
|
|
||||||
|
for l < r {
|
||||||
|
for numbers[r]+numbers[l] > target {
|
||||||
|
r--
|
||||||
|
}
|
||||||
|
if numbers[r]+numbers[l] == target {
|
||||||
|
return []int{l + 1, r + 1}
|
||||||
|
}
|
||||||
|
|
||||||
|
for numbers[r]+numbers[l] < target {
|
||||||
|
l++
|
||||||
|
}
|
||||||
|
if numbers[r]+numbers[l] == target {
|
||||||
|
return []int{l + 1, r + 1}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return []int{} // impossible
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = twoSum
|
||||||
28
solutions/10/q1071/solution.go
Normal file
28
solutions/10/q1071/solution.go
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
package q1071
|
||||||
|
|
||||||
|
func isRepeatOf(segment, str string) bool {
|
||||||
|
if len(segment) > len(str) || len(segment) == 0 || len(str)%len(segment) != 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for len(str) > 0 {
|
||||||
|
if str[:len(segment)] != segment {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
str = str[len(segment):]
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func gcdOfStrings(str1 string, str2 string) string {
|
||||||
|
if len(str1) > len(str2) {
|
||||||
|
str1, str2 = str2, str1
|
||||||
|
}
|
||||||
|
for l := len(str1); l > 0; l-- {
|
||||||
|
if isRepeatOf(str1[:l], str1) && isRepeatOf(str1[:l], str2) {
|
||||||
|
return str1[:l]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = gcdOfStrings
|
||||||
14
solutions/11/q1137/solution.go
Normal file
14
solutions/11/q1137/solution.go
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
package q1137
|
||||||
|
|
||||||
|
func tribonacci(n int) int {
|
||||||
|
a := [3]int{0, 1, 1}
|
||||||
|
if n < 3 {
|
||||||
|
return a[n]
|
||||||
|
}
|
||||||
|
for range n - 3 + 1 {
|
||||||
|
a = [3]int{a[1], a[2], a[0] + a[1] + a[2]}
|
||||||
|
}
|
||||||
|
return a[2]
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = tribonacci
|
||||||
25
solutions/12/q1207/solution.go
Normal file
25
solutions/12/q1207/solution.go
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
package q1207
|
||||||
|
|
||||||
|
import "slices"
|
||||||
|
|
||||||
|
type void struct{}
|
||||||
|
|
||||||
|
func uniqueOccurrences(arr []int) bool {
|
||||||
|
slices.Sort(arr)
|
||||||
|
seen := map[int]void{}
|
||||||
|
|
||||||
|
for i := 0; i < len(arr); {
|
||||||
|
c := arr[i]
|
||||||
|
count := 0
|
||||||
|
for ; i < len(arr) && arr[i] == c; i++ {
|
||||||
|
count++
|
||||||
|
}
|
||||||
|
if _, ok := seen[count]; ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
seen[count] = void{}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = uniqueOccurrences
|
||||||
27
solutions/13/q1365/solution.go
Normal file
27
solutions/13/q1365/solution.go
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
package q1365
|
||||||
|
|
||||||
|
import "slices"
|
||||||
|
|
||||||
|
func smallerNumbersThanCurrent(nums []int) []int {
|
||||||
|
buf := make([]int, 2*len(nums))
|
||||||
|
|
||||||
|
positions := buf[0:len(nums)]
|
||||||
|
for i := range positions {
|
||||||
|
positions[i] = i
|
||||||
|
}
|
||||||
|
slices.SortFunc(positions, func(a, b int) int { return nums[a] - nums[b] })
|
||||||
|
|
||||||
|
nLesser := buf[len(nums):]
|
||||||
|
last := -1
|
||||||
|
for i, p := range positions {
|
||||||
|
if nums[p] == last {
|
||||||
|
nLesser[p] = nLesser[positions[i-1]]
|
||||||
|
} else {
|
||||||
|
last = nums[p]
|
||||||
|
nLesser[p] = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nLesser
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = smallerNumbersThanCurrent
|
||||||
16
solutions/14/q1431/solution.go
Normal file
16
solutions/14/q1431/solution.go
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
package q1431
|
||||||
|
|
||||||
|
import "slices"
|
||||||
|
|
||||||
|
func kidsWithCandies(candies []int, extraCandies int) []bool {
|
||||||
|
ret := make([]bool, len(candies))
|
||||||
|
maxC := slices.Max(candies)
|
||||||
|
for i, c := range candies {
|
||||||
|
if c+extraCandies >= maxC {
|
||||||
|
ret[i] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = kidsWithCandies
|
||||||
38
solutions/14/q1458/solution.go
Normal file
38
solutions/14/q1458/solution.go
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
package q1458
|
||||||
|
|
||||||
|
import "math"
|
||||||
|
|
||||||
|
func maxDotProduct(nums1 []int, nums2 []int) int {
|
||||||
|
board := make([][]int, len(nums1))
|
||||||
|
boardBuf := make([]int, len(nums1)*len(nums2))
|
||||||
|
for i := range board {
|
||||||
|
board[i] = boardBuf[i*len(nums2) : (i+1)*len(nums2)]
|
||||||
|
}
|
||||||
|
maxSingle := math.MinInt
|
||||||
|
|
||||||
|
for i1 := range nums1 {
|
||||||
|
for i2 := range nums2 {
|
||||||
|
prod := nums1[i1] * nums2[i2]
|
||||||
|
maxSingle = max(maxSingle, prod)
|
||||||
|
|
||||||
|
if i1 > 0 && i2 > 0 {
|
||||||
|
prod += board[i1-1][i2-1]
|
||||||
|
}
|
||||||
|
board[i1][i2] = max(0, prod)
|
||||||
|
|
||||||
|
if i2 > 0 {
|
||||||
|
board[i1][i2] = max(board[i1][i2-1], board[i1][i2])
|
||||||
|
}
|
||||||
|
if i1 > 0 {
|
||||||
|
board[i1][i2] = max(board[i1-1][i2], board[i1][i2])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if maxSingle <= 0 {
|
||||||
|
return maxSingle
|
||||||
|
}
|
||||||
|
return board[len(nums1)-1][len(nums2)-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = maxDotProduct
|
||||||
14
solutions/14/q1470/solution.go
Normal file
14
solutions/14/q1470/solution.go
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
package q1470
|
||||||
|
|
||||||
|
func shuffle(nums []int, n int) []int {
|
||||||
|
ret := make([]int, n*2)
|
||||||
|
for i, num := range nums[:n] {
|
||||||
|
ret[i*2] = num
|
||||||
|
}
|
||||||
|
for i, num := range nums[n : n*2] {
|
||||||
|
ret[i*2+1] = num
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = shuffle
|
||||||
13
solutions/17/q1732/solution.go
Normal file
13
solutions/17/q1732/solution.go
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
package q1732
|
||||||
|
|
||||||
|
func largestAltitude(gain []int) int {
|
||||||
|
alt := 0
|
||||||
|
max_ := 0
|
||||||
|
for _, g := range gain {
|
||||||
|
alt += g
|
||||||
|
max_ = max(alt, max_)
|
||||||
|
}
|
||||||
|
return max_
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = largestAltitude
|
||||||
19
solutions/17/q1768/solution.go
Normal file
19
solutions/17/q1768/solution.go
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
package q1768
|
||||||
|
|
||||||
|
import "strings"
|
||||||
|
|
||||||
|
func mergeAlternately(word1 string, word2 string) string {
|
||||||
|
builder := strings.Builder{}
|
||||||
|
for i := range max(len(word1), len(word2)) {
|
||||||
|
if i < len(word1) {
|
||||||
|
builder.WriteByte(word1[i])
|
||||||
|
}
|
||||||
|
if i < len(word2) {
|
||||||
|
builder.WriteByte(word2[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return builder.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = mergeAlternately
|
||||||
7
solutions/19/q1929/solution.go
Normal file
7
solutions/19/q1929/solution.go
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
package q1929
|
||||||
|
|
||||||
|
func getConcatenation(nums []int) []int {
|
||||||
|
return append(nums, nums...)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = getConcatenation
|
||||||
18
solutions/2/q206/solution.go
Normal file
18
solutions/2/q206/solution.go
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
package q206
|
||||||
|
|
||||||
|
type ListNode struct {
|
||||||
|
Val int
|
||||||
|
Next *ListNode
|
||||||
|
}
|
||||||
|
|
||||||
|
func reverseList(head *ListNode) *ListNode {
|
||||||
|
var prev, current *ListNode = nil, head
|
||||||
|
for current != nil {
|
||||||
|
next := current.Next
|
||||||
|
current.Next = prev
|
||||||
|
prev, current = current, next
|
||||||
|
}
|
||||||
|
return prev
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = reverseList
|
||||||
17
solutions/2/q283/solution.go
Normal file
17
solutions/2/q283/solution.go
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
package q283
|
||||||
|
|
||||||
|
func moveZeroes(nums []int) {
|
||||||
|
p := 0
|
||||||
|
for i := range nums {
|
||||||
|
if nums[i] == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
nums[p] = nums[i]
|
||||||
|
p++
|
||||||
|
}
|
||||||
|
for i := p; i < len(nums); i++ {
|
||||||
|
nums[i] = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = moveZeroes
|
||||||
42
solutions/22/q2215/solution.go
Normal file
42
solutions/22/q2215/solution.go
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
package q2215
|
||||||
|
|
||||||
|
import "slices"
|
||||||
|
|
||||||
|
func skip(nums []int, i int) int {
|
||||||
|
if i < len(nums) {
|
||||||
|
for c := nums[i]; i < len(nums) && nums[i] == c; i++ {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
|
||||||
|
func findDifference(nums1 []int, nums2 []int) [][]int {
|
||||||
|
slices.Sort(nums1)
|
||||||
|
slices.Sort(nums2)
|
||||||
|
d1 := []int{}
|
||||||
|
d2 := []int{}
|
||||||
|
|
||||||
|
i1, i2 := 0, 0
|
||||||
|
for i1 < len(nums1) || i2 < len(nums2) {
|
||||||
|
// num2[i2] is unique
|
||||||
|
if i1 == len(nums1) || i2 < len(nums2) && nums2[i2] < nums1[i1] {
|
||||||
|
d2 = append(d2, nums2[i2])
|
||||||
|
i2 = skip(nums2, i2)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// num1[i1] is unique
|
||||||
|
if i2 == len(nums2) || i1 < len(nums1) && nums1[i1] < nums2[i2] {
|
||||||
|
d1 = append(d1, nums1[i1])
|
||||||
|
i1 = skip(nums1, i1)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
i1 = skip(nums1, i1)
|
||||||
|
i2 = skip(nums2, i2)
|
||||||
|
}
|
||||||
|
|
||||||
|
return [][]int{d1, d2}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = findDifference
|
||||||
11
solutions/3/q338/solution.go
Normal file
11
solutions/3/q338/solution.go
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
package q338
|
||||||
|
|
||||||
|
func countBits(n int) []int {
|
||||||
|
ret := make([]int, n+1)
|
||||||
|
for i := 1; i <= n; i++ {
|
||||||
|
ret[i] = ret[i>>1] + i%2
|
||||||
|
}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = countBits
|
||||||
31
solutions/3/q345/solution.go
Normal file
31
solutions/3/q345/solution.go
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
package q345
|
||||||
|
|
||||||
|
func isVowel(b byte) bool {
|
||||||
|
switch b {
|
||||||
|
case 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U':
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func reverseVowels(s string) string {
|
||||||
|
edit := []byte(s)
|
||||||
|
|
||||||
|
l, r := 0, len(edit)-1
|
||||||
|
for l < r {
|
||||||
|
for l < r && !isVowel(edit[l]) {
|
||||||
|
l++
|
||||||
|
}
|
||||||
|
for l < r && !isVowel(edit[r]) {
|
||||||
|
r--
|
||||||
|
}
|
||||||
|
if l < r {
|
||||||
|
edit[l], edit[r] = edit[r], edit[l]
|
||||||
|
l++
|
||||||
|
r--
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return string(edit)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = reverseVowels
|
||||||
22
solutions/3/q374/solution.go
Normal file
22
solutions/3/q374/solution.go
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
package q374
|
||||||
|
|
||||||
|
func guess(num int) int { panic("stub") }
|
||||||
|
|
||||||
|
func guessNumber(n int) int {
|
||||||
|
l, r := 1, n+1
|
||||||
|
|
||||||
|
for l < r {
|
||||||
|
m := (l + r) / 2
|
||||||
|
switch guess(m) {
|
||||||
|
case -1: // too high
|
||||||
|
r = m
|
||||||
|
case 1: // too low
|
||||||
|
l = m + 1
|
||||||
|
case 0:
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = guessNumber
|
||||||
22
solutions/4/q448/solution.go
Normal file
22
solutions/4/q448/solution.go
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
package q448
|
||||||
|
|
||||||
|
func findDisappearedNumbers(nums []int) []int {
|
||||||
|
n := len(nums)
|
||||||
|
ret := make([]int, n)
|
||||||
|
for i := range ret {
|
||||||
|
ret[i] = i + 1
|
||||||
|
}
|
||||||
|
for _, num := range nums {
|
||||||
|
ret[num-1] = -1
|
||||||
|
}
|
||||||
|
p := 0
|
||||||
|
for i := range ret {
|
||||||
|
if ret[i] != -1 {
|
||||||
|
ret[p] = ret[i]
|
||||||
|
p++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret[:p]
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = findDisappearedNumbers
|
||||||
18
solutions/4/q485/solution.go
Normal file
18
solutions/4/q485/solution.go
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
package q485
|
||||||
|
|
||||||
|
func findMaxConsecutiveOnes(nums []int) int {
|
||||||
|
maxNum := 0
|
||||||
|
cur := 0
|
||||||
|
|
||||||
|
for _, n := range nums {
|
||||||
|
if n == 1 {
|
||||||
|
cur++
|
||||||
|
} else {
|
||||||
|
maxNum = max(maxNum, cur)
|
||||||
|
cur = 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return max(maxNum, cur)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = findMaxConsecutiveOnes
|
||||||
22
solutions/6/q605/solution.go
Normal file
22
solutions/6/q605/solution.go
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
package q605
|
||||||
|
|
||||||
|
func canPlaceFlowers(flowerbed []int, n int) bool {
|
||||||
|
for i := 0; i < len(flowerbed); i++ {
|
||||||
|
if flowerbed[i] == 1 {
|
||||||
|
i++
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if (i == 0 || flowerbed[i-1] == 0) && (i == len(flowerbed)-1 || flowerbed[i+1] == 0) {
|
||||||
|
flowerbed[i] = 1
|
||||||
|
i++
|
||||||
|
n--
|
||||||
|
if n <= 0 {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return n == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = canPlaceFlowers
|
||||||
23
solutions/6/q643/solution.go
Normal file
23
solutions/6/q643/solution.go
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
package q643
|
||||||
|
|
||||||
|
import "math"
|
||||||
|
|
||||||
|
func findMaxAverage(nums []int, k int) float64 {
|
||||||
|
var maxSum = math.MinInt
|
||||||
|
|
||||||
|
sum := 0
|
||||||
|
for i := range nums {
|
||||||
|
if i < k-1 {
|
||||||
|
sum += nums[i]
|
||||||
|
} else {
|
||||||
|
sum += nums[i]
|
||||||
|
if i >= k {
|
||||||
|
sum -= nums[i-k]
|
||||||
|
}
|
||||||
|
maxSum = max(maxSum, sum)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return float64(maxSum) / float64(k)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = findMaxAverage
|
||||||
22
solutions/6/q645/solution.go
Normal file
22
solutions/6/q645/solution.go
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
package q645
|
||||||
|
|
||||||
|
func findErrorNums(nums []int) []int {
|
||||||
|
var duplicated, missing int
|
||||||
|
seen := make([]bool, len(nums))
|
||||||
|
|
||||||
|
for _, n := range nums {
|
||||||
|
if seen[n-1] {
|
||||||
|
duplicated = n
|
||||||
|
}
|
||||||
|
seen[n-1] = true
|
||||||
|
}
|
||||||
|
for i, ok := range seen {
|
||||||
|
if !ok {
|
||||||
|
missing = i + 1
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return []int{duplicated, missing}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = findErrorNums
|
||||||
24
solutions/7/q700/solution.go
Normal file
24
solutions/7/q700/solution.go
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
package q700
|
||||||
|
|
||||||
|
type TreeNode struct {
|
||||||
|
Val int
|
||||||
|
Left *TreeNode
|
||||||
|
Right *TreeNode
|
||||||
|
}
|
||||||
|
|
||||||
|
func searchBST(root *TreeNode, val int) *TreeNode {
|
||||||
|
if root == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case val == root.Val:
|
||||||
|
return root
|
||||||
|
case val > root.Val:
|
||||||
|
return searchBST(root.Right, val)
|
||||||
|
default:
|
||||||
|
return searchBST(root.Left, val)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = searchBST
|
||||||
21
solutions/7/q724/solution.go
Normal file
21
solutions/7/q724/solution.go
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
package q724
|
||||||
|
|
||||||
|
func pivotIndex(nums []int) int {
|
||||||
|
sumL, sumR := 0, 0
|
||||||
|
for _, n := range nums {
|
||||||
|
sumR += n
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range nums {
|
||||||
|
sumR -= nums[i]
|
||||||
|
if i > 0 {
|
||||||
|
sumL += nums[i-1]
|
||||||
|
}
|
||||||
|
if sumL == sumR {
|
||||||
|
return i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = pivotIndex
|
||||||
11
solutions/7/q746/solution.go
Normal file
11
solutions/7/q746/solution.go
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
package q746
|
||||||
|
|
||||||
|
func minCostClimbingStairs(cost []int) int {
|
||||||
|
minCost := make([]int, len(cost)+1)
|
||||||
|
for i := 2; i < len(minCost); i++ {
|
||||||
|
minCost[i] = min(minCost[i-2]+cost[i-2], minCost[i-1]+cost[i-1])
|
||||||
|
}
|
||||||
|
return minCost[len(minCost)-1]
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = minCostClimbingStairs
|
||||||
35
solutions/8/q865/solution.go
Normal file
35
solutions/8/q865/solution.go
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
package q865
|
||||||
|
|
||||||
|
type TreeNode struct {
|
||||||
|
Val int
|
||||||
|
Left *TreeNode
|
||||||
|
Right *TreeNode
|
||||||
|
}
|
||||||
|
|
||||||
|
func search(node *TreeNode, depth int) (*TreeNode, int) {
|
||||||
|
if node == nil {
|
||||||
|
return nil, 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if node.Left == nil && node.Right == nil {
|
||||||
|
return node, depth
|
||||||
|
}
|
||||||
|
|
||||||
|
ln, ld := search(node.Left, depth+1)
|
||||||
|
rn, rd := search(node.Right, depth+1)
|
||||||
|
switch {
|
||||||
|
case ld == rd:
|
||||||
|
return node, ld
|
||||||
|
case ld < rd:
|
||||||
|
return rn, rd
|
||||||
|
default:
|
||||||
|
return ln, ld
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func subtreeWithAllDeepest(root *TreeNode) *TreeNode {
|
||||||
|
node, _ := search(root, 1)
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = subtreeWithAllDeepest
|
||||||
34
solutions/8/q872/solution.go
Normal file
34
solutions/8/q872/solution.go
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
package q872
|
||||||
|
|
||||||
|
import "slices"
|
||||||
|
|
||||||
|
type TreeNode struct {
|
||||||
|
Val int
|
||||||
|
Left *TreeNode
|
||||||
|
Right *TreeNode
|
||||||
|
}
|
||||||
|
|
||||||
|
func leafSeq(node *TreeNode, cache []int) []int {
|
||||||
|
if cache == nil {
|
||||||
|
cache = []int{}
|
||||||
|
}
|
||||||
|
leaf := true
|
||||||
|
if node.Left != nil {
|
||||||
|
leaf = false
|
||||||
|
cache = leafSeq(node.Left, cache)
|
||||||
|
}
|
||||||
|
if node.Right != nil {
|
||||||
|
leaf = false
|
||||||
|
cache = leafSeq(node.Right, cache)
|
||||||
|
}
|
||||||
|
if leaf {
|
||||||
|
cache = append(cache, node.Val)
|
||||||
|
}
|
||||||
|
return cache
|
||||||
|
}
|
||||||
|
|
||||||
|
func leafSimilar(root1 *TreeNode, root2 *TreeNode) bool {
|
||||||
|
return slices.Equal(leafSeq(root1, nil), leafSeq(root2, nil))
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ = leafSimilar
|
||||||
46
solutions/9/q933/solution.go
Normal file
46
solutions/9/q933/solution.go
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
package q933
|
||||||
|
|
||||||
|
type RecentCounter struct{ reqs []int }
|
||||||
|
|
||||||
|
func Constructor() RecentCounter {
|
||||||
|
return RecentCounter{reqs: make([]int, 0, 1024)}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *RecentCounter) Ping(t int) int {
|
||||||
|
if cap(c.reqs) == len(c.reqs) {
|
||||||
|
alloc := make([]int, max(2048, 2*len(c.reqs)))
|
||||||
|
copy(alloc, c.reqs)
|
||||||
|
c.reqs = alloc[:len(c.reqs)]
|
||||||
|
}
|
||||||
|
|
||||||
|
c.reqs = append(c.reqs, t)
|
||||||
|
|
||||||
|
// Fast path
|
||||||
|
if len(c.reqs) < 8 || c.reqs[7] >= t-3000 {
|
||||||
|
i := 0
|
||||||
|
for c.reqs[i] < t-3000 {
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
c.reqs = c.reqs[i:]
|
||||||
|
return len(c.reqs)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use binary search to find the cut position
|
||||||
|
l, r := 0, len(c.reqs)
|
||||||
|
for l < r {
|
||||||
|
m := (l + r) / 2
|
||||||
|
if c.reqs[m] < t-3000 {
|
||||||
|
l = m + 1
|
||||||
|
} else {
|
||||||
|
r = m
|
||||||
|
}
|
||||||
|
}
|
||||||
|
c.reqs = c.reqs[l:]
|
||||||
|
return len(c.reqs)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Your RecentCounter object will be instantiated and called as such:
|
||||||
|
* obj := Constructor();
|
||||||
|
* param_1 := obj.Ping(t);
|
||||||
|
*/
|
||||||
Loading…
Add table
Add a link
Reference in a new issue