u
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
package top100liked
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// https://leetcode.cn/problems/lru-cache/?envType=study-plan-v2&envId=top-100-liked
|
||||
|
||||
type LN struct {
|
||||
Key int
|
||||
Val int
|
||||
Prev *LN
|
||||
Next *LN
|
||||
}
|
||||
|
||||
type LRUCache struct {
|
||||
length int
|
||||
capacity int
|
||||
dummyHead *LN
|
||||
dummyTail *LN
|
||||
kv map[int]*LN
|
||||
}
|
||||
|
||||
func Constructor(capacity int) LRUCache {
|
||||
head := &LN{}
|
||||
tail := &LN{}
|
||||
head.Next = tail
|
||||
tail.Prev = head
|
||||
return LRUCache{
|
||||
length: 0,
|
||||
capacity: capacity,
|
||||
dummyHead: head,
|
||||
dummyTail: tail,
|
||||
kv: make(map[int]*LN, capacity),
|
||||
}
|
||||
}
|
||||
|
||||
func (this *LRUCache) removeNode(node *LN) {
|
||||
node.Prev.Next = node.Next
|
||||
node.Next.Prev = node.Prev
|
||||
}
|
||||
|
||||
func (this *LRUCache) addToHead(node *LN) {
|
||||
node.Next = this.dummyHead.Next
|
||||
node.Prev = this.dummyHead
|
||||
this.dummyHead.Next.Prev = node
|
||||
this.dummyHead.Next = node
|
||||
}
|
||||
|
||||
func (this *LRUCache) Get(key int) int {
|
||||
if node, ok := this.kv[key]; ok {
|
||||
this.removeNode(node)
|
||||
this.addToHead(node)
|
||||
return node.Val
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
func (this *LRUCache) Put(key int, value int) {
|
||||
if node, ok := this.kv[key]; ok {
|
||||
node.Val = value
|
||||
this.removeNode(node)
|
||||
this.addToHead(node)
|
||||
return
|
||||
}
|
||||
if this.length >= this.capacity {
|
||||
lru := this.dummyTail.Prev
|
||||
this.removeNode(lru)
|
||||
delete(this.kv, lru.Key)
|
||||
} else {
|
||||
this.length++
|
||||
}
|
||||
newNode := &LN{Key: key, Val: value}
|
||||
this.addToHead(newNode)
|
||||
this.kv[key] = newNode
|
||||
}
|
||||
|
||||
func Test1(t *testing.T) {
|
||||
lRUCache := Constructor(2)
|
||||
lRUCache.Put(1, 1)
|
||||
lRUCache.Put(2, 2)
|
||||
fmt.Println(lRUCache.Get(1))
|
||||
lRUCache.Put(3, 3)
|
||||
fmt.Println(lRUCache.Get(2))
|
||||
lRUCache.Put(4, 4)
|
||||
fmt.Println(lRUCache.Get(1))
|
||||
fmt.Println(lRUCache.Get(3))
|
||||
fmt.Println(lRUCache.Get(4))
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package top100liked
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
// https://leetcode.cn/problems/binary-tree-inorder-traversal/?envType=study-plan-v2&envId=top-100-liked
|
||||
|
||||
type TreeNode struct {
|
||||
Val int
|
||||
Left *TreeNode
|
||||
Right *TreeNode
|
||||
}
|
||||
|
||||
func inorderTraversal(root *TreeNode) []int {
|
||||
if root == nil {
|
||||
return []int{}
|
||||
}
|
||||
res := []int{}
|
||||
if root.Left != nil {
|
||||
res = append(res, inorderTraversal(root.Left)...)
|
||||
}
|
||||
res = append(res, root.Val)
|
||||
if root.Right != nil {
|
||||
res = append(res, inorderTraversal(root.Right)...)
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
||||
func Test1(t *testing.T) {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package top100liked
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
// https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/?envType=study-plan-v2&envId=top-100-liked
|
||||
|
||||
type TreeNode struct {
|
||||
Val int
|
||||
Left *TreeNode
|
||||
Right *TreeNode
|
||||
}
|
||||
|
||||
func maxDepth(root *TreeNode) int {
|
||||
if root == nil {
|
||||
return 0
|
||||
}
|
||||
if root.Left == nil && root.Right == nil {
|
||||
return 1
|
||||
}
|
||||
md := 0
|
||||
if root.Left != nil {
|
||||
md = maxDepth(root.Left) + 1
|
||||
}
|
||||
if root.Right != nil {
|
||||
md = max(maxDepth(root.Right)+1, md)
|
||||
}
|
||||
return md
|
||||
}
|
||||
|
||||
func Test1(t *testing.T) {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package top100liked
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
// https://leetcode.cn/problems/invert-binary-tree/description/?envType=study-plan-v2&envId=top-100-liked
|
||||
|
||||
type TreeNode struct {
|
||||
Val int
|
||||
Left *TreeNode
|
||||
Right *TreeNode
|
||||
}
|
||||
|
||||
func invertTree(root *TreeNode) *TreeNode {
|
||||
if root == nil {
|
||||
return nil
|
||||
}
|
||||
root.Left, root.Right = root.Right, root.Left
|
||||
invertTree(root.Left)
|
||||
invertTree(root.Right)
|
||||
return root
|
||||
}
|
||||
|
||||
func Test1(t *testing.T) {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
package top100liked
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
// https://leetcode.cn/problems/symmetric-tree/description/?envType=study-plan-v2&envId=top-100-liked
|
||||
|
||||
type TreeNode struct {
|
||||
Val int
|
||||
Left *TreeNode
|
||||
Right *TreeNode
|
||||
}
|
||||
|
||||
func isSymmetric(root *TreeNode) bool {
|
||||
return check(root.Left, root.Right)
|
||||
}
|
||||
|
||||
func check(p, q *TreeNode) bool {
|
||||
if p == nil && q == nil {
|
||||
return true
|
||||
}
|
||||
if p == nil || q == nil {
|
||||
return false
|
||||
}
|
||||
return p.Val == q.Val && check(p.Left, q.Right) && check(p.Right, q.Left)
|
||||
}
|
||||
|
||||
func Test1(t *testing.T) {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package top100liked
|
||||
|
||||
// https://leetcode.cn/problems/diameter-of-binary-tree/description/?envType=study-plan-v2&envId=top-100-liked
|
||||
|
||||
type TreeNode struct {
|
||||
Val int
|
||||
Left *TreeNode
|
||||
Right *TreeNode
|
||||
}
|
||||
|
||||
func diameterOfBinaryTree(root *TreeNode) int {
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user