diff --git a/LICENSE b/LICENSE deleted file mode 100644 index efb9808..0000000 --- a/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to diff --git a/Makefile b/Makefile deleted file mode 100644 index ecbfafa..0000000 --- a/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -lint: - golangci-lint run ./... - -.PHONY: lint diff --git a/create.sh b/create.sh deleted file mode 100755 index cd8458f..0000000 --- a/create.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash - -num=$1 - -echo "$num" | grep -q "^[1-9][0-9]\{,4\}$" || { - echo "Err: no valid number given" >&2 - exit 1 -} - -parent=$((num / 100)) -pdir="solutions/${parent}/q${num}" -sol_file="${pdir}/solution.go" - -if [ -f "$sol_file" ]; then - exit 0 -fi - -echo "Creating template for question No. $num" >&2 -mkdir -pv "$pdir" -echo "package q$num" > "$sol_file" -echo "Created $sol_file" diff --git a/go.mod b/go.mod index 9e38376..e062fa1 100644 --- a/go.mod +++ b/go.mod @@ -1,15 +1,3 @@ module leetcode-go go 1.25.5 - -require ( - github.com/emirpasic/gods/v2 v2.0.0-alpha - github.com/k0kubun/pp/v3 v3.5.0 -) - -require ( - github.com/mattn/go-colorable v0.1.14 // indirect - github.com/mattn/go-isatty v0.0.20 // indirect - golang.org/x/sys v0.29.0 // indirect - golang.org/x/text v0.26.0 // indirect -) diff --git a/go.sum b/go.sum deleted file mode 100644 index 0aa4e6a..0000000 --- a/go.sum +++ /dev/null @@ -1,13 +0,0 @@ -github.com/emirpasic/gods/v2 v2.0.0-alpha h1:dwFlh8pBg1VMOXWGipNMRt8v96dKAIvBehtCt6OtunU= -github.com/emirpasic/gods/v2 v2.0.0-alpha/go.mod h1:W0y4M2dtBB9U5z3YlghmpuUhiaZT2h6yoeE+C1sCp6A= -github.com/k0kubun/pp/v3 v3.5.0 h1:iYNlYA5HJAJvkD4ibuf9c8y6SHM0QFhaBuCqm1zHp0w= -github.com/k0kubun/pp/v3 v3.5.0/go.mod h1:5lzno5ZZeEeTV/Ky6vs3g6d1U3WarDrH8k240vMtGro= -github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= -github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= -github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= -github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= diff --git a/solutions/0/q15/solution.go b/solutions/0/q15/solution.go deleted file mode 100644 index 69d9fcd..0000000 --- a/solutions/0/q15/solution.go +++ /dev/null @@ -1,65 +0,0 @@ -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 diff --git a/solutions/0/q17/solution.go b/solutions/0/q17/solution.go deleted file mode 100644 index 632e70d..0000000 --- a/solutions/0/q17/solution.go +++ /dev/null @@ -1,39 +0,0 @@ -package q17 - -var alphabets = [][]byte{ - []byte("abc"), - []byte("def"), - []byte("ghi"), - []byte("jkl"), - []byte("mno"), - []byte("pqrs"), - []byte("tuv"), - []byte("wxyz"), -} - -func combinations(offsets []int, i int, buffer []byte, strings []string) []string { - if buffer == nil { - buffer = make([]byte, len(offsets)) - } - - if i == len(offsets) { - return append(strings, string(buffer)) - } - - for _, c := range alphabets[offsets[i]] { - buffer[i] = c - strings = combinations(offsets, i+1, buffer, strings) - } - return strings -} - -func letterCombinations(digits string) []string { - offsets := make([]int, len(digits)) - for i := range len(digits) { - offsets[i] = int(digits[i] - '2') - } - - return combinations(offsets, 0, nil, []string{}) -} - -var _ = letterCombinations diff --git a/solutions/0/q20/solution.go b/solutions/0/q20/solution.go deleted file mode 100644 index 254d63b..0000000 --- a/solutions/0/q20/solution.go +++ /dev/null @@ -1,32 +0,0 @@ -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 diff --git a/solutions/0/q35/solution.go b/solutions/0/q35/solution.go deleted file mode 100644 index 15f6011..0000000 --- a/solutions/0/q35/solution.go +++ /dev/null @@ -1,19 +0,0 @@ -package q35 - -func searchInsert(nums []int, target int) int { - l, r := 0, len(nums) - for l < r { - mid := (l + r) / 2 - switch { - case nums[mid] == target: - return mid - case nums[mid] > target: - r = mid - default: - l = mid + 1 - } - } - return l -} - -var _ = searchInsert diff --git a/solutions/0/q53/solution.go b/solutions/0/q53/solution.go deleted file mode 100644 index af32086..0000000 --- a/solutions/0/q53/solution.go +++ /dev/null @@ -1,18 +0,0 @@ -package q53 - -import "math" - -func maxSubArray(nums []int) int { - sum := 0 - minSubstract := 0 - maxSubArr := math.MinInt - for i := range nums { - sum += nums[i] - nums[i] = sum - maxSubArr = max(maxSubArr, nums[i]-minSubstract) - minSubstract = min(minSubstract, nums[i]) - } - return maxSubArr -} - -var _ = maxSubArray diff --git a/solutions/0/q66/solution.go b/solutions/0/q66/solution.go deleted file mode 100644 index fdcfb96..0000000 --- a/solutions/0/q66/solution.go +++ /dev/null @@ -1,22 +0,0 @@ -package q66 - -func plusOne(digits []int) []int { - digits[len(digits)-1]++ - for i := len(digits) - 1; i > 0; i-- { - if digits[i] > 9 { - digits[i] -= 10 - digits[i-1]++ - } else { - break - } - } - if digits[0] > 9 { - digits[0] -= 10 - ret := make([]int, 0, len(digits)+1) - ret = append(ret, 1) - return append(ret, digits...) - } - return digits -} - -var _ = plusOne diff --git a/solutions/0/q67/solution.go b/solutions/0/q67/solution.go deleted file mode 100644 index b1618ef..0000000 --- a/solutions/0/q67/solution.go +++ /dev/null @@ -1,28 +0,0 @@ -package q67 - -func toDigit(byt byte) uint8 { return byt - '0' } -func toByte(digit uint8) byte { return '0' + digit } - -func addBinary(a string, b string) string { - lenA, lenB := len(a), len(b) - ret := make([]byte, max(lenA, lenB)+1) - var carry uint8 - for i := range ret { - d := carry - if i < lenA { - d += toDigit(a[lenA-i-1]) - } - if i < lenB { - d += toDigit(b[lenB-i-1]) - } - carry = d / 2 - ret[len(ret)-i-1] = toByte(d % 2) - } - - if ret[0] != '1' { - return string(ret[1:]) - } - return string(ret) -} - -var _ = addBinary diff --git a/solutions/0/q69/solution.go b/solutions/0/q69/solution.go deleted file mode 100644 index f02eb65..0000000 --- a/solutions/0/q69/solution.go +++ /dev/null @@ -1,26 +0,0 @@ -package q69 - -func mySqrt(x int) int { - if x < 2 { - return x - } - l, r := 0, x/2+1 - for l < r { - m := (l + r) / 2 - sq := m * m - switch { - case sq == x: - return m - case sq < x: - if (m+1)*(m+1) > x { - return m - } - l = m + 1 - case sq > x: - r = m - } - } - return -1 -} - -var _ = mySqrt diff --git a/solutions/0/q70/solution.go b/solutions/0/q70/solution.go deleted file mode 100644 index 540545d..0000000 --- a/solutions/0/q70/solution.go +++ /dev/null @@ -1,24 +0,0 @@ -package q70 - -func nWays(n, i int, cache []int) int { - if i == n { - return 1 - } - if i > n { - return 0 - } - if cache == nil { - cache = make([]int, n) - } else if cache[i] != 0 { - return cache[i] - } - ret := nWays(n, i+1, cache) + nWays(n, i+2, cache) - cache[i] = ret - return ret -} - -func climbStairs(n int) int { - return nWays(n, 0, nil) -} - -var _ = climbStairs diff --git a/solutions/0/q9/solution.go b/solutions/0/q9/solution.go deleted file mode 100644 index faf307a..0000000 --- a/solutions/0/q9/solution.go +++ /dev/null @@ -1,18 +0,0 @@ -package q9 - -import "strconv" - -func isPalindrome(x int) bool { - if x < 0 { - return false - } - str := strconv.FormatInt(int64(x), 10) - for i := range len(str) / 2 { - if str[i] != str[len(str)-1-i] { - return false - } - } - return true -} - -var _ = isPalindrome diff --git a/solutions/1/q104/solution.go b/solutions/1/q104/solution.go deleted file mode 100644 index 78fa9ca..0000000 --- a/solutions/1/q104/solution.go +++ /dev/null @@ -1,20 +0,0 @@ -package q104 - -type TreeNode struct { - Val int - Left *TreeNode - Right *TreeNode -} - -func md(d int, node *TreeNode) int { - if node == nil { - return d - 1 - } - return max(md(d+1, node.Left), md(d+1, node.Right)) -} - -func maxDepth(root *TreeNode) int { - return md(1, root) -} - -var _ = maxDepth diff --git a/solutions/1/q108/solution.go b/solutions/1/q108/solution.go deleted file mode 100644 index 2de7147..0000000 --- a/solutions/1/q108/solution.go +++ /dev/null @@ -1,26 +0,0 @@ -package q108 - -type TreeNode struct { - Val int - Left *TreeNode - Right *TreeNode -} - -func sortedArrayToBST(nums []int) *TreeNode { - if len(nums) == 0 { - return nil - } - if len(nums) == 1 { - return &TreeNode{Val: nums[0]} - } - - l, r := nums[:len(nums)/2], nums[len(nums)/2+1:] - m := nums[len(nums)/2] - return &TreeNode{ - Val: m, - Left: sortedArrayToBST(l), - Right: sortedArrayToBST(r), - } -} - -var _ = sortedArrayToBST diff --git a/solutions/1/q120/solution.go b/solutions/1/q120/solution.go deleted file mode 100644 index 5978b01..0000000 --- a/solutions/1/q120/solution.go +++ /dev/null @@ -1,14 +0,0 @@ -package q120 - -func minimumTotal(triangle [][]int) int { - size := len(triangle) - - for row := size - 2; row >= 0; row-- { - for i := range triangle[row] { - triangle[row][i] += min(triangle[row+1][i], triangle[row+1][i+1]) - } - } - return triangle[0][0] -} - -var _ = minimumTotal diff --git a/solutions/1/q136/solution.go b/solutions/1/q136/solution.go deleted file mode 100644 index f1a8404..0000000 --- a/solutions/1/q136/solution.go +++ /dev/null @@ -1,11 +0,0 @@ -package q136 - -func singleNumber(nums []int) int { - x := 0 - for _, num := range nums { - x ^= num - } - return x -} - -var _ = singleNumber diff --git a/solutions/1/q141/solution.go b/solutions/1/q141/solution.go deleted file mode 100644 index e927c9f..0000000 --- a/solutions/1/q141/solution.go +++ /dev/null @@ -1,28 +0,0 @@ -package q141 - -type ListNode struct { - Val int - Next *ListNode -} - -func hasCycle(head *ListNode) bool { - if head == nil { - return false - } - - p1, p2 := head, head - for { - for range 2 { - p2 = p2.Next - switch p2 { - case nil: - return false - case p1: - return true - } - } - p1 = p1.Next - } -} - -var _ = hasCycle diff --git a/solutions/1/q190/solution.go b/solutions/1/q190/solution.go deleted file mode 100644 index 31c77df..0000000 --- a/solutions/1/q190/solution.go +++ /dev/null @@ -1,13 +0,0 @@ -package q190 - -func reverseBits(n int) int { - ret := 0 - for i := range 32 { - if n|(1< 0; n >>= 1 { - if n|1 == n { - num++ - } - } - return num -} - -var _ = hammingWeight diff --git a/solutions/1/q199/solution.go b/solutions/1/q199/solution.go deleted file mode 100644 index 3ee35a9..0000000 --- a/solutions/1/q199/solution.go +++ /dev/null @@ -1,37 +0,0 @@ -package q199 - -type TreeNode struct { - Val int - Left *TreeNode - Right *TreeNode -} - -func rightSideView(root *TreeNode) []int { - ret := []int{} - - type qElem struct { - height int - node *TreeNode - } - - queue := []qElem{{0, root}} - var last *qElem - for ; len(queue) > 0; queue = queue[1:] { - cur := &queue[0] - if cur.node == nil { - continue - } - if last != nil && last.height < cur.height { - ret = append(ret, last.node.Val) - } - last = cur - queue = append(queue, qElem{cur.height + 1, cur.node.Left}, qElem{cur.height + 1, cur.node.Right}) - } - if last != nil { - ret = append(ret, last.node.Val) - } - - return ret -} - -var _ = rightSideView diff --git a/solutions/2/q200/solution.go b/solutions/2/q200/solution.go deleted file mode 100644 index 9564d9a..0000000 --- a/solutions/2/q200/solution.go +++ /dev/null @@ -1,31 +0,0 @@ -package q200 - -const ( - VISITED byte = '.' - LAND byte = '1' -) - -func traverse(grid [][]byte, x, y int) int { - if x < 0 || y < 0 || x >= len(grid[0]) || y >= len(grid) || grid[y][x] != LAND { - return 0 - } - - grid[y][x] = VISITED - traverse(grid, x+1, y) - traverse(grid, x-1, y) - traverse(grid, x, y+1) - traverse(grid, x, y-1) - return 1 -} - -func numIslands(grid [][]byte) int { - count := 0 - for y := range grid { - for x := range grid[y] { - count += traverse(grid, x, y) - } - } - return count -} - -var _ = numIslands diff --git a/solutions/2/q208/solution.go b/solutions/2/q208/solution.go deleted file mode 100644 index 87c3ca2..0000000 --- a/solutions/2/q208/solution.go +++ /dev/null @@ -1,105 +0,0 @@ -package q208 - -type tNode struct { - str string - childs [26]*tNode - hasWord bool -} - -func (n *tNode) index() int { return index(n.str) } - -func (n *tNode) split(prefixLen int) (*tNode, *tNode) { - if len(n.str) < prefixLen { - panic("cannot split node") - } - if len(n.str) == prefixLen { - return n, nil - } - - prefix := n.str[:prefixLen] - n.str = n.str[prefixLen:] - p := &tNode{str: prefix} - p.childs[n.index()] = n - return p, n -} - -func commonPrefix(a, b string) int { - minLen := min(len(a), len(b)) - for i := range minLen { - if a[i] != b[i] { - return i - } - } - return minLen -} - -func index(str string) int { - if len(str) > 0 { - return int(str[0] - 'a') - } - return -1 // root -} - -type Trie struct { - root *tNode -} - -func Constructor() Trie { - return Trie{ - root: &tNode{}, - } -} - -func (t *Trie) Insert(word string) { - node := t.root - for len(word) > 0 { - idx := index(word) - next := node.childs[idx] - if next != nil { - pflen := commonPrefix(word, next.str) - next, _ = next.split(pflen) - node.childs[next.index()] = next - word = word[pflen:] - } else { - next = &tNode{str: word} - word = "" - node.childs[idx] = next - } - node = next - } - node.hasWord = true -} - -func (t *Trie) Search(word string) bool { - node := t.root - for len(word) > 0 { - next := node.childs[index(word)] - if next == nil { - return false - } - pflen := commonPrefix(word, next.str) - if pflen != len(next.str) { - return false - } - word = word[pflen:] - node = next - } - return node.hasWord -} - -func (t *Trie) StartsWith(prefix string) bool { - node := t.root - for len(prefix) > 0 { - next := node.childs[index(prefix)] - if next == nil { - return false - } - pflen := commonPrefix(prefix, next.str) - if pflen != len(next.str) && pflen != len(prefix) { - return false - } - prefix = prefix[pflen:] - node = next - } - return true -} diff --git a/solutions/2/q215/solution.go b/solutions/2/q215/solution.go deleted file mode 100644 index 41c54d3..0000000 --- a/solutions/2/q215/solution.go +++ /dev/null @@ -1,37 +0,0 @@ -package q215 - -func findKthLargest(nums []int, k int) int { - // build max-heap - for i := 1; i < len(nums); i++ { - for j := i; j > 0; j = (j - 1) / 2 { - parent := (j - 1) / 2 - if nums[j] > nums[parent] { - nums[j], nums[parent] = nums[parent], nums[j] - } - } - } - - for range k - 1 { - // pop the heap - nums[0] = nums[len(nums)-1] - nums = nums[:len(nums)-1] - - i := 0 - for i*2+1 < len(nums) { - l, r := i*2+1, i*2+2 - next := l - if r < len(nums) && nums[r] > nums[l] { - next = r - } - if nums[i] >= nums[next] { - break - } - nums[i], nums[next] = nums[next], nums[i] - i = next - } - } - - return nums[0] -} - -var _ = findKthLargest diff --git a/solutions/2/q228/solution.go b/solutions/2/q228/solution.go deleted file mode 100644 index 15e303f..0000000 --- a/solutions/2/q228/solution.go +++ /dev/null @@ -1,32 +0,0 @@ -package q228 - -import ( - "fmt" - "strconv" -) - -func addToRanges(output []string, a, b int) []string { - if a == b { - return append(output, strconv.FormatInt(int64(a), 10)) - } - return append(output, fmt.Sprintf("%d->%d", a, b)) -} - -func summaryRanges(nums []int) []string { - if len(nums) == 0 { - return nil - } - - output := []string{} - l := 0 - for r := 1; r < len(nums); r++ { - if nums[r]-nums[r-1] != 1 { - output = addToRanges(output, nums[l], nums[r-1]) - l = r - } - } - output = addToRanges(output, nums[l], nums[len(nums)-1]) - return output -} - -var _ = summaryRanges diff --git a/solutions/24/q2483/solution.go b/solutions/24/q2483/solution.go deleted file mode 100644 index 2e6b54e..0000000 --- a/solutions/24/q2483/solution.go +++ /dev/null @@ -1,29 +0,0 @@ -package q2483 - -func bestClosingTime(customers string) int { - numY := 0 - for i := range len(customers) { - if customers[i] == 'Y' { - numY++ - } - } - minCloseHour := 0 - minPenalty := numY - penalty := numY - for i := range len(customers) { - // close at (i + 1)th hour - switch customers[i] { - case 'N': - penalty++ - case 'Y': - penalty-- - } - if penalty < minPenalty { - minPenalty = penalty - minCloseHour = i + 1 - } - } - return minCloseHour -} - -var _ = bestClosingTime diff --git a/solutions/3/q383/solution.go b/solutions/3/q383/solution.go deleted file mode 100644 index 8e6f390..0000000 --- a/solutions/3/q383/solution.go +++ /dev/null @@ -1,25 +0,0 @@ -package q383 - -func canConstruct(ransomNote string, magazine string) bool { - counts := make([]int, 'z'-'a'+1) - - for _, c := range magazine { - if c < 'a' || c > 'z' { - continue - } - counts[int(c)-int('a')]++ - } - for _, c := range ransomNote { - if c < 'a' || c > 'z' { - continue - } - offset := int(c) - int('a') - counts[offset]-- - if counts[offset] < 0 { - return false - } - } - return true -} - -var _ = canConstruct diff --git a/solutions/30/q3075/solution.go b/solutions/30/q3075/solution.go deleted file mode 100644 index e319b8d..0000000 --- a/solutions/30/q3075/solution.go +++ /dev/null @@ -1,14 +0,0 @@ -package q3075 - -import "slices" - -func maximumHappinessSum(happiness []int, k int) int64 { - slices.Sort(happiness) - var sum int64 - for i := range k { - sum += max(0, int64(happiness[len(happiness)-1-i]-i)) - } - return sum -} - -var _ = maximumHappinessSum diff --git a/solutions/5/q530/solution.go b/solutions/5/q530/solution.go deleted file mode 100644 index 673014c..0000000 --- a/solutions/5/q530/solution.go +++ /dev/null @@ -1,37 +0,0 @@ -package q530 - -import "math" - -type TreeNode struct { - Val int - Left *TreeNode - Right *TreeNode -} - -func getMinimumDifference(root *TreeNode) int { - minDiff := math.MaxInt - var last *int - - var check = func(num int) { - if last == nil { - last = &num - return - } - minDiff = min(minDiff, num-*last) - *last = num - } - var traverse func(node *TreeNode) - traverse = func(node *TreeNode) { - if node == nil { - return - } - traverse(node.Left) - check(node.Val) - traverse(node.Right) - } - traverse(root) - - return minDiff -} - -var _ = getMinimumDifference diff --git a/solutions/6/q637/solution.go b/solutions/6/q637/solution.go deleted file mode 100644 index a6822d5..0000000 --- a/solutions/6/q637/solution.go +++ /dev/null @@ -1,43 +0,0 @@ -package q637 - -type TreeNode struct { - Val int - Left *TreeNode - Right *TreeNode -} - -func averageOfLevels(root *TreeNode) []float64 { - type qElem struct { - level int - node *TreeNode - } - - ret := []float64{} - level := 0 - n := 0 // number of nodes - var sum float64 - - queue := []qElem{{level: 0, node: root}} - for ; len(queue) > 0; queue = queue[1:] { - curr := &queue[0] - if curr.level == level { - sum += float64(curr.node.Val) - n++ - } else { - ret = append(ret, sum/float64(n)) - sum = float64(curr.node.Val) - n = 1 - level = curr.level - } - if curr.node.Left != nil { - queue = append(queue, qElem{curr.level + 1, curr.node.Left}) - } - if curr.node.Right != nil { - queue = append(queue, qElem{curr.level + 1, curr.node.Right}) - } - } - ret = append(ret, sum/float64(n)) - return ret -} - -var _ = averageOfLevels diff --git a/solutions/9/q909/solution.go b/solutions/9/q909/solution.go deleted file mode 100644 index bd1e397..0000000 --- a/solutions/9/q909/solution.go +++ /dev/null @@ -1,50 +0,0 @@ -package q909 - -func coord(n, num int) (x, y int) { - num -= 1 - row := num / n - y = n - row - 1 - x = num % n - if row%2 == 1 { - x = n - 1 - x - } - return -} - -func snakesAndLadders(board [][]int) int { - n, sqN := len(board), len(board)*len(board) - leastRolls := make([]int, sqN) - if len(leastRolls) == 1 { - return 0 - } - - queue := make([]int, 0, sqN) - queue = append(queue, 1) - for ; len(queue) > 0; queue = queue[1:] { - cur := queue[0] - for dist := 1; dist <= 6 && cur+dist <= sqN; dist++ { - next := cur + dist - x, y := coord(n, next) - if board[y][x] != -1 { - next = board[y][x] - } - rolls := leastRolls[cur-1] + 1 - - if (next > 1 && leastRolls[next-1] == 0) || rolls < leastRolls[next-1] { - leastRolls[next-1] = rolls - if next == sqN { - return rolls - } - queue = append(queue, next) - } - } - } - - l := leastRolls[sqN-1] - if l == 0 { - return -1 - } - return 0 -} - -var _ = snakesAndLadders diff --git a/solutions/1/q125/solution.go b/solutions/q125/solution.go similarity index 100% rename from solutions/1/q125/solution.go rename to solutions/q125/solution.go diff --git a/solutions/1/q134/solution.go b/solutions/q134/solution.go similarity index 100% rename from solutions/1/q134/solution.go rename to solutions/q134/solution.go diff --git a/solutions/1/q134/solution_test.go b/solutions/q134/solution_test.go similarity index 100% rename from solutions/1/q134/solution_test.go rename to solutions/q134/solution_test.go diff --git a/solutions/1/q135/solution.go b/solutions/q135/solution.go similarity index 100% rename from solutions/1/q135/solution.go rename to solutions/q135/solution.go diff --git a/solutions/1/q150/solution.go b/solutions/q150/solution.go similarity index 100% rename from solutions/1/q150/solution.go rename to solutions/q150/solution.go diff --git a/solutions/2/q209/solution.go b/solutions/q209/solution.go similarity index 100% rename from solutions/2/q209/solution.go rename to solutions/q209/solution.go diff --git a/solutions/2/q238/solution.go b/solutions/q238/solution.go similarity index 100% rename from solutions/2/q238/solution.go rename to solutions/q238/solution.go diff --git a/solutions/2/q238/solution_test.go b/solutions/q238/solution_test.go similarity index 100% rename from solutions/2/q238/solution_test.go rename to solutions/q238/solution_test.go diff --git a/solutions/0/q36/solution.go b/solutions/q36/solution.go similarity index 100% rename from solutions/0/q36/solution.go rename to solutions/q36/solution.go diff --git a/solutions/3/q380/solution.go b/solutions/q380/solution.go similarity index 100% rename from solutions/3/q380/solution.go rename to solutions/q380/solution.go diff --git a/tools.go b/tools.go deleted file mode 100644 index e24a421..0000000 --- a/tools.go +++ /dev/null @@ -1,6 +0,0 @@ -package leetcodego - -import ( - _ "github.com/emirpasic/gods/v2/utils" - _ "github.com/k0kubun/pp/v3" -)