Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added Week_01/id_29/Algorithm.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
39 changes: 39 additions & 0 deletions Week_01/id_29/LeetCode_021_29.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package main

// LeetCode - 021. Merge Two Sorted Lists
// https://leetcode.com/problems/merge-two-sorted-lists/
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
// Check boundary condition
if l1 == nil {
return l2
}
if l2 == nil {
return l1
}

// Create dummy node
dummy := ListNode{}
head := &dummy

// Connect l1 and l2
for l1 != nil && l2 != nil {
if l1.Val < l2.Val {
head.Next = l1
l1 = l1.Next
} else {
head.Next = l2
l2 = l2.Next
}
head = head.Next
}

// Check leftover
if l1 != nil {
head.Next = l1
}
if l2 != nil {
head.Next = l2
}

return dummy.Next
}
24 changes: 24 additions & 0 deletions Week_01/id_29/LeetCode_024_29.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package main

// LeetCode - 024. Swap Nodes in Pairs
// https://leetcode.com/problems/swap-nodes-in-pairs/
func swapPairs(head *ListNode) *ListNode {
dummy := ListNode{}
dummy.Next = head

pre := &dummy

for pre != nil {
if pre.Next == nil || pre.Next.Next == nil {
break
}

first := pre.Next
pre.Next = first.Next
first.Next = first.Next.Next
pre.Next.Next = first
pre = first
}

return dummy.Next
}
16 changes: 16 additions & 0 deletions Week_01/id_29/LeetCode_026_29.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package main

// LeetCode - 026. Remove Duplicates from Sorted Array
// https://leetcode.com/problems/remove-duplicates-from-sorted-array/
func removeDuplicates(nums []int) int {
replaceIndex := 1

for curr := 1; curr < len(nums); curr++ {
if nums[curr] != nums[curr-1] {
nums[replaceIndex] = nums[curr]
replaceIndex++
}
}

return replaceIndex
}
29 changes: 29 additions & 0 deletions Week_01/id_29/LeetCode_049_29.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package main

import (
"sort"
"strings"
)

// LeetCode - 49. Group Anagrams
// https://leetcode.com/problems/group-anagrams/
func SortString(w string) string {
s := strings.Split(w, "")
sort.Strings(s)
return strings.Join(s, "")
}

func groupAnagrams(strs []string) [][]string {
m := make(map[string][]string)

for _, w := range strs {
word := SortString(w)
m[word] = append(m[word], w)
}

var ss [][]string
for e := range m {
ss = append(ss, m[e])
}
return ss
}
21 changes: 21 additions & 0 deletions Week_01/id_29/LeetCode_050_29.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package main

// LeetCode - 50. Pow(x, n)
// https://leetcode.com/problems/powx-n/
func myPow(x float64, n int) float64 {
if n == 0 {
return 1
}
if n == 1 {
return x
}
if n < 0 {
return 1 / myPow(x, -n)
}

if n%2 == 0 {
return myPow(x*x, n/2)
} else {
return x * myPow(x*x, n/2)
}
}
20 changes: 20 additions & 0 deletions Week_01/id_29/LeetCode_088_29.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package main

// LeetCode - 088. Merge Sorted Array
// https://leetcode.com/problems/merge-sorted-array/
func merge(nums1 []int, m int, nums2 []int, n int) {
replaceIndex := m + n - 1
array1Target := m - 1
array2Target := n - 1

for array2Target >= 0 {
if array1Target >= 0 && nums2[array2Target] < nums1[array1Target] {
nums1[replaceIndex] = nums1[array1Target]
array1Target--
} else {
nums1[replaceIndex] = nums2[array2Target]
array2Target--
}
replaceIndex--
}
}
13 changes: 13 additions & 0 deletions Week_01/id_29/LeetCode_104_29.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package main

// LeetCode - 104. Maximum Depth of Binary Tree
// https://leetcode.com/problems/maximum-depth-of-binary-tree/
import "math"

func maxDepth(root *TreeNode) int {
if root == nil {
return 0
}

return int(math.Max(float64(maxDepth(root.Left)), float64(maxDepth(root.Right))) + 1)
}
21 changes: 21 additions & 0 deletions Week_01/id_29/LeetCode_189_29.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package main

// LeetCode - 189. Rotate Array
// https://leetcode.com/problems/rotate-array/
func rotate(nums []int, k int) {
n := len(nums)

k = k % n

reverse(nums, 0, n-1)
reverse(nums, 0, k-1)
reverse(nums, k, n-1)
}

func reverse(nums []int, i int, j int) {
for i < j {
nums[i], nums[j] = nums[j], nums[i]
i++
j--
}
}
38 changes: 38 additions & 0 deletions Week_01/id_29/LeetCode_242_29.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package main

// LeetCode - 242. Valid Anagram
// https://leetcode.com/problems/valid-anagram/
func isAnagram(s string, t string) bool {
if len(s) != len(t) {
return false
}

mapA := buildCharMap(s)
mapB := buildCharMap(t)

for key, Acount := range mapA {
Bcount, ok := mapB[key]
if !ok {
return false
}
if Acount != Bcount {
return false
}
}

return true
}

func buildCharMap(s string) map[rune]int {
m := make(map[rune]int)

for _, char := range s {
if _, ok := m[char]; ok {
m[char]++
} else {
m[char] = 1
}
}

return m
}
36 changes: 36 additions & 0 deletions Week_01/id_29/LeetCode_257_29.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package main

import "strconv"

// LeetCode - 257. Binary Tree Paths
// https://leetcode.com/problems/binary-tree-paths/
func binaryTreePaths(root *TreeNode) []string {
if root == nil {
return nil
}

res := make([]string, 0, 16)

dfs("", root, &res)

return res
}

func dfs(path string, root *TreeNode, res *[]string) {
if path == "" {
path += strconv.Itoa(root.Val)
} else {
path += "->" + strconv.Itoa(root.Val)
}

if root.Left != nil {
dfs(path, root.Left, res)
}
if root.Right != nil {
dfs(path, root.Right, res)
}

if root.Left == nil && root.Right == nil {
*res = append(*res, path)
}
}
19 changes: 19 additions & 0 deletions Week_01/id_29/LeetCode_938_29.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package main

// LeetCode - 938. Range Sum of BST
// https://leetcode.com/problems/range-sum-of-bst/
func rangeSumBST(root *TreeNode, L int, R int) int {
return dfs938(root, L, R)
}

func dfs938(root *TreeNode, L int, R int) int {
if root == nil {
return 0
}

if root.Val >= L && root.Val <= R {
return root.Val + dfs938(root.Left, L, R) + dfs938(root.Right, L, R)
}

return dfs938(root.Left, L, R) + dfs938(root.Right, L, R)
}
16 changes: 16 additions & 0 deletions Week_01/id_29/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package main

type ListNode struct {
Val int
Next *ListNode
}

type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}

func main() {

}