diff --git a/go/append-characters-to-string-to-make-subsequence.go b/go/append-characters-to-string-to-make-subsequence.go index 79ad4a1..8a43534 100644 --- a/go/append-characters-to-string-to-make-subsequence.go +++ b/go/append-characters-to-string-to-make-subsequence.go @@ -1,4 +1,4 @@ -package append_characters_to_string_to_make_subsequence +package main func appendCharacters(s string, t string) int { si, ti := 0, 0 diff --git a/go/continuous-subarray-sum.go b/go/continuous-subarray-sum.go index 4da0094..b9b7bf7 100644 --- a/go/continuous-subarray-sum.go +++ b/go/continuous-subarray-sum.go @@ -1,4 +1,4 @@ -package continuous_subarray_sum +package main func checkSubarraySum(nums []int, k int) bool { first_index_of := make(map[int]int) diff --git a/go/count-triplets-that-can-form-two-arrays-of-equal-xor.go b/go/count-triplets-that-can-form-two-arrays-of-equal-xor.go index 4d2b8f3..e542ca4 100644 --- a/go/count-triplets-that-can-form-two-arrays-of-equal-xor.go +++ b/go/count-triplets-that-can-form-two-arrays-of-equal-xor.go @@ -1,4 +1,4 @@ -package count_triplets_that_can_form_two_arrays_of_equal_xor +package main func countTriplets(arr []int) int { precomputePrefix := func() []int { diff --git a/go/diameter-of-binary-tree.go b/go/diameter-of-binary-tree.go index f4b6535..3150c5a 100644 --- a/go/diameter-of-binary-tree.go +++ b/go/diameter-of-binary-tree.go @@ -1,4 +1,4 @@ -package diameter_of_binary_tree +package main /** * Definition for a binary tree node. diff --git a/go/find-common-characters.go b/go/find-common-characters.go index 1c0ec7b..7e030fc 100644 --- a/go/find-common-characters.go +++ b/go/find-common-characters.go @@ -1,4 +1,4 @@ -package find_common_characters +package main func commonChars(words []string) []string { A := int('a') diff --git a/go/get-equal-substrings-within-budget.go b/go/get-equal-substrings-within-budget.go index 369627e..3c89b28 100644 --- a/go/get-equal-substrings-within-budget.go +++ b/go/get-equal-substrings-within-budget.go @@ -1,4 +1,4 @@ -package get_equal_substrings_within_budget +package main func equalSubstring(s string, t string, maxCost int) int { abs := func(x int) int { diff --git a/go/go.mod b/go/go.mod new file mode 100644 index 0000000..617d20f --- /dev/null +++ b/go/go.mod @@ -0,0 +1,11 @@ +module gitlab.com/mfocko/LeetCode + +go 1.22.3 + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/emirpasic/gods/v2 v2.0.0-alpha // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/testify v1.9.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go/go.sum b/go/go.sum new file mode 100644 index 0000000..4d37363 --- /dev/null +++ b/go/go.sum @@ -0,0 +1,11 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/go/height-checker.go b/go/height-checker.go index 8558c1c..e7158e0 100644 --- a/go/height-checker.go +++ b/go/height-checker.go @@ -1,4 +1,4 @@ -package height_checker +package main func heightChecker(heights []int) int { // count the heights diff --git a/go/implement-queue-using-stacks.go b/go/implement-queue-using-stacks.go index 8a9d8fe..a5d8242 100644 --- a/go/implement-queue-using-stacks.go +++ b/go/implement-queue-using-stacks.go @@ -1,4 +1,4 @@ -package implement_queue_using_stacks +package main import ( "slices" @@ -9,13 +9,18 @@ type MyQueue struct { asStack []int } -func Constructor() MyQueue { +func NewQueue() MyQueue { return MyQueue{ asQueue: make([]int, 0, 16), asStack: make([]int, 0, 16), } } +// [XXX] Uncomment for LeetCode +// func Constructor() MyQueue { +// return NewQueue() +// } + func (this *MyQueue) Push(x int) { this.asStack = append(this.asStack, x) } diff --git a/go/implement-queue-using-stacks_test.go b/go/implement-queue-using-stacks_test.go index 319f362..80c7c15 100644 --- a/go/implement-queue-using-stacks_test.go +++ b/go/implement-queue-using-stacks_test.go @@ -1,19 +1,19 @@ -package implement_queue_using_stacks +package main import ( "testing" ) -func TestEmpty(t *testing.T) { - obj := Constructor() +func Test_ImplementQueueUsingStacks_Empty(t *testing.T) { + obj := NewQueue() if !obj.Empty() { t.Error("Queue should be empty") } } -func TestBasic(t *testing.T) { - q := Constructor() +func Test_ImplementQueueUsingStacks_Basic(t *testing.T) { + q := NewQueue() q.Push(1) q.Push(2) diff --git a/go/implement-trie-prefix-tree.go b/go/implement-trie-prefix-tree.go index 9e36542..0a3ed36 100644 --- a/go/implement-trie-prefix-tree.go +++ b/go/implement-trie-prefix-tree.go @@ -1,4 +1,4 @@ -package implement_trie_prefix_tree +package main type TrieNode struct { has bool @@ -9,10 +9,15 @@ type Trie struct { root TrieNode } -func Constructor() Trie { +func NewTrie() Trie { return Trie{} } +// [XXX] Uncomment for LeetCode +// func Constructor() Trie { +// return NewTrie() +// } + func (this *Trie) Insert(word string) { node := &this.root diff --git a/go/ipo.go b/go/ipo.go index 67610ae..8f2dc84 100644 --- a/go/ipo.go +++ b/go/ipo.go @@ -1,4 +1,4 @@ -package ipo +package main import ( "cmp" diff --git a/go/listnode.go b/go/listnode.go new file mode 100644 index 0000000..827e4b0 --- /dev/null +++ b/go/listnode.go @@ -0,0 +1,6 @@ +package main + +type ListNode struct { + Val int + Next *ListNode +} diff --git a/go/longest-palindrome.go b/go/longest-palindrome.go index bc13910..5a5866a 100644 --- a/go/longest-palindrome.go +++ b/go/longest-palindrome.go @@ -1,4 +1,4 @@ -package longest_palindrome +package main func longestPalindrome(s string) int { getFreqs := func() map[rune]int { diff --git a/go/middle-of-the-linked-list.go b/go/middle-of-the-linked-list.go index 025ab5d..3747d46 100644 --- a/go/middle-of-the-linked-list.go +++ b/go/middle-of-the-linked-list.go @@ -1,4 +1,4 @@ -package middle_of_the_linked_list +package main /** * Definition for singly-linked list. diff --git a/go/minimum-increment-to-make-array-unique.go b/go/minimum-increment-to-make-array-unique.go index d8ee876..6972950 100644 --- a/go/minimum-increment-to-make-array-unique.go +++ b/go/minimum-increment-to-make-array-unique.go @@ -1,4 +1,4 @@ -package minimum_increment_to_make_array_unique +package main import "slices" diff --git a/go/minimum-number-of-moves-to-seat-everyone.go b/go/minimum-number-of-moves-to-seat-everyone.go index d91fca8..8413cb0 100644 --- a/go/minimum-number-of-moves-to-seat-everyone.go +++ b/go/minimum-number-of-moves-to-seat-everyone.go @@ -1,4 +1,4 @@ -package minimum_number_of_moves_to_seat_everyone +package main import ( "slices" diff --git a/go/number-of-steps-to-reduce-a-number-in-binary-representation-to-one.go b/go/number-of-steps-to-reduce-a-number-in-binary-representation-to-one.go index 29fac25..9dad8e7 100644 --- a/go/number-of-steps-to-reduce-a-number-in-binary-representation-to-one.go +++ b/go/number-of-steps-to-reduce-a-number-in-binary-representation-to-one.go @@ -1,4 +1,4 @@ -package number_of_steps_to_reduce_a_number_in_binary_representation_to_one +package main func numSteps(s string) int { steps := 0 diff --git a/go/palindrome-partitioning.go b/go/palindrome-partitioning.go index 4cd92d4..3db0b4c 100644 --- a/go/palindrome-partitioning.go +++ b/go/palindrome-partitioning.go @@ -1,4 +1,4 @@ -package palindrome_partitioning +package main import ( "slices" diff --git a/go/palindromic-substrings.go b/go/palindromic-substrings.go index 368fd85..b48b6a7 100644 --- a/go/palindromic-substrings.go +++ b/go/palindromic-substrings.go @@ -1,4 +1,4 @@ -package palindromic_substrings +package main func checkSubstring(s string, i, j int) int { if i < 0 || j >= len(s) { diff --git a/go/relative-sort-array.go b/go/relative-sort-array.go index 82590ed..97eb23e 100644 --- a/go/relative-sort-array.go +++ b/go/relative-sort-array.go @@ -1,4 +1,4 @@ -package relative_sort_array +package main import ( "cmp" diff --git a/go/remove-nth-node-from-end-of-list.go b/go/remove-nth-node-from-end-of-list.go index 6288f88..7acc816 100644 --- a/go/remove-nth-node-from-end-of-list.go +++ b/go/remove-nth-node-from-end-of-list.go @@ -1,4 +1,4 @@ -package remove_nth_node_from_end_of_list +package main /** * Definition for singly-linked list. diff --git a/go/same-tree.go b/go/same-tree.go index b551458..cde5456 100644 --- a/go/same-tree.go +++ b/go/same-tree.go @@ -1,4 +1,4 @@ -package same_tree +package main /** * Definition for a binary tree node. diff --git a/go/score-of-a-string.go b/go/score-of-a-string.go index e4faa2c..73dcabf 100644 --- a/go/score-of-a-string.go +++ b/go/score-of-a-string.go @@ -1,4 +1,4 @@ -package score_of_a_string +package main func scoreOfString(s string) int { abs := func(x int) int { diff --git a/go/search-suggestions-system.go b/go/search-suggestions-system.go index f9c7e6e..139102c 100644 --- a/go/search-suggestions-system.go +++ b/go/search-suggestions-system.go @@ -1,32 +1,4 @@ -package search_suggestions_system - -type TrieNode struct { - has bool - successors [26]*TrieNode -} - -type Trie struct { - root TrieNode -} - -func Constructor() Trie { - return Trie{} -} - -func (this *Trie) Insert(word string) { - node := &this.root - - for _, c := range word { - idx := int(c) - int('a') - - if node.successors[idx] == nil { - node.successors[idx] = new(TrieNode) - } - node = node.successors[idx] - } - - node.has = true -} +package main func (this *Trie) Suggest(word string) [][]string { firstThree := func(node *TrieNode, prefix string) []string { @@ -71,7 +43,7 @@ func (this *Trie) Suggest(word string) [][]string { } func suggestedProducts(products []string, searchWord string) [][]string { - trie := Constructor() + trie := NewTrie() for _, product := range products { trie.Insert(product) } diff --git a/go/single-number-iii.go b/go/single-number-iii.go index f365fe4..3876501 100644 --- a/go/single-number-iii.go +++ b/go/single-number-iii.go @@ -1,4 +1,4 @@ -package single_number_iii +package main func singleNumber(nums []int) []int { reduce := func() int { diff --git a/go/sort-colors.go b/go/sort-colors.go index be5c431..6b2d672 100644 --- a/go/sort-colors.go +++ b/go/sort-colors.go @@ -1,4 +1,4 @@ -package sort_colors +package main func sortColors(nums []int) { l, r := 0, len(nums)-1 diff --git a/go/special-array-with-x-elements-greater-than-or-equal-x.go b/go/special-array-with-x-elements-greater-than-or-equal-x.go index 36eb8fe..ee0380a 100644 --- a/go/special-array-with-x-elements-greater-than-or-equal-x.go +++ b/go/special-array-with-x-elements-greater-than-or-equal-x.go @@ -1,4 +1,4 @@ -package special_array_with_x_elements_greater_than_or_equal_x +package main import ( "slices" diff --git a/go/subarray-sums-divisible-by-k.go b/go/subarray-sums-divisible-by-k.go index ce0e9be..1378048 100644 --- a/go/subarray-sums-divisible-by-k.go +++ b/go/subarray-sums-divisible-by-k.go @@ -1,4 +1,4 @@ -package subarray_sums_divisible_by_k +package main func subarraysDivByK(nums []int, k int) int { counters := make([]int, k) diff --git a/go/subsets.go b/go/subsets.go index 52fc3f8..9637249 100644 --- a/go/subsets.go +++ b/go/subsets.go @@ -1,4 +1,4 @@ -package subsets +package main func subsets(nums []int) [][]int { var sets [][]int diff --git a/go/the-number-of-beautiful-subsets.go b/go/the-number-of-beautiful-subsets.go index df87890..85d96a4 100644 --- a/go/the-number-of-beautiful-subsets.go +++ b/go/the-number-of-beautiful-subsets.go @@ -1,4 +1,4 @@ -package the_number_of_beautiful_subsets +package main import ( "slices" diff --git a/go/treenode.go b/go/treenode.go new file mode 100644 index 0000000..1778343 --- /dev/null +++ b/go/treenode.go @@ -0,0 +1,7 @@ +package main + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +}