diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..4aa91ea --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/algorithm023.iml b/.idea/algorithm023.iml new file mode 100644 index 0000000..338a266 --- /dev/null +++ b/.idea/algorithm023.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..ef004d1 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..7bf78ea --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..9661ac7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git "a/Week_01/1.\344\270\244\346\225\260\344\271\213\345\222\214.go" "b/Week_01/1.\344\270\244\346\225\260\344\271\213\345\222\214.go" new file mode 100644 index 0000000..9c7a7e7 --- /dev/null +++ "b/Week_01/1.\344\270\244\346\225\260\344\271\213\345\222\214.go" @@ -0,0 +1,21 @@ +package week01 +/* + * @lc app=leetcode.cn id=1 lang=golang + * + * [1] 两数之和 + */ + +// @lc code=start +func twoSum(nums []int, target int) []int { + hash:= map[int]int{} + for i,num:=range nums{ + if v,ok:=hash[target-num];ok{ + return []int{v,i} + } + hash[num] = i + } + return nil + +} +// @lc code=end + diff --git "a/Week_01/283.\347\247\273\345\212\250\351\233\266.go" "b/Week_01/283.\347\247\273\345\212\250\351\233\266.go" new file mode 100644 index 0000000..2dd0ad7 --- /dev/null +++ "b/Week_01/283.\347\247\273\345\212\250\351\233\266.go" @@ -0,0 +1,37 @@ +/* + * @lc app=leetcode.cn id=283 lang=golang + * + * [283] 移动零 + */ +package week01 +// @lc code=start +func moveZeroes(nums []int) { + a := 0 + for _,item:=range nums{ + if item != 0{ + nums[a] = item + a++ + } + } + + for i:=a;i 0 { + for root != nil { + res = append(res, root.Val) + if len(root.Children) == 0 { + break + } + for i:=len(root.Children)-1;i>0;i--{ + stack = append(stack,root.Children[i]) + } + root = root.Children[0] + } + root = stack[len(stack)-1] + stack = stack[:len(stack)-1] + } + return res +} + +// 迭代 +var res []int +func preorder2(root *Node) []int { + res = []int{} + dfs(root) + return res +} +func dfs(root *Node) { + if root != nil { + res = append(res, root.Val) + for _,n := range root.Children { + dfs(n) + } + } +} + diff --git "a/Week_02/N\345\217\211\346\240\221\347\232\204\345\261\202\345\272\217\346\216\222\345\210\227.go" "b/Week_02/N\345\217\211\346\240\221\347\232\204\345\261\202\345\272\217\346\216\222\345\210\227.go" new file mode 100644 index 0000000..e63a560 --- /dev/null +++ "b/Week_02/N\345\217\211\346\240\221\347\232\204\345\261\202\345\272\217\346\216\222\345\210\227.go" @@ -0,0 +1,32 @@ +/** + @author: dingfeng + @date: 2021/1/10 + @note: +**/ +package Week_02 + +// bfs +func levelOrder(root *Node) [][]int { + var res [][]int + res = [][]int{} + if root == nil { + return res + } + queue := []*Node{root} + var level int + for 0 < len(queue) { + counter := len(queue) + res = append(res,[]int{}) + for i := 0; i < counter; i++ { + if queue[i] != nil { + res[level] = append(res[level], queue[i].Val) + for _, n := range queue[i].Children { + queue = append(queue, n) + } + } + } + queue = queue[counter:] + level++ + } + return res +} diff --git a/Week_02/README.md b/Week_02/README.md index 50de304..e293312 100644 --- a/Week_02/README.md +++ b/Week_02/README.md @@ -1 +1,3 @@ -学习笔记 \ No newline at end of file +学习笔记 +这次的课后作业题目比较多,有些题目做的遍数太少了,后续还有“五毒神掌”的方法继续过遍数,做到熟记于心。 +虽然自己之前不管是学习中还是在工作中,都很少接触到数据结构和算法相关内容,但是经过这两周的学习,有种焕然一新的感觉,并且十分感兴趣。 \ No newline at end of file diff --git a/Week_02/test.go b/Week_02/test.go new file mode 100644 index 0000000..1bc24a2 --- /dev/null +++ b/Week_02/test.go @@ -0,0 +1,43 @@ +/** + @author: dingfeng + @date: 2021/1/12 + @note: +**/ +package Week_02 + +import "sort" + +//paixu +func repeategroupAnagrams(strs []string) [][]string { + hash := map[string][]string{} + for _,str:=range strs{ + s := []byte(str) + sort.Slice(s, func(i, j int) bool { + return s[i] b { + return b + } + return a + } + for i := 1; i < n; i++ { + t1, t2, t3 := dp[a]*2, dp[b]*3, dp[c]*5 + dp[i] = min(min(t1, t2), t3) + if dp[i] == t1 { + a++ + } + if dp[i] == t2 { + b++ + } + if dp[i] == t3 { + c++ + } + } + return dp[n-1] +} diff --git "a/Week_02/\344\270\244\346\225\260\344\271\213\345\222\214.go" "b/Week_02/\344\270\244\346\225\260\344\271\213\345\222\214.go" new file mode 100644 index 0000000..ec791aa --- /dev/null +++ "b/Week_02/\344\270\244\346\225\260\344\271\213\345\222\214.go" @@ -0,0 +1,29 @@ +/** + @author: dingfeng + @date: 2021/1/10 + @note: +**/ +package Week_02 + +// 暴力求解 +func twoSum(nums []int, target int) []int { + for i:=0;i 0 { + for root != nil { + stack = append(stack, root) + root = root.Left + } + root = stack[len(stack)-1] + stack = stack[:len(stack)-1] + res = append(res, root.Val) + root = root.Right + } + return + +} \ No newline at end of file diff --git "a/Week_02/\344\272\214\345\217\211\346\240\221\347\232\204\345\211\215\345\272\217\351\201\215\345\216\206.go" "b/Week_02/\344\272\214\345\217\211\346\240\221\347\232\204\345\211\215\345\272\217\351\201\215\345\216\206.go" new file mode 100644 index 0000000..51d5049 --- /dev/null +++ "b/Week_02/\344\272\214\345\217\211\346\240\221\347\232\204\345\211\215\345\272\217\351\201\215\345\216\206.go" @@ -0,0 +1,38 @@ +/** + @author: dingfeng + @date: 2021/1/10 + @note: +**/ +package Week_02 + +//递归 +func preorderTraversal(root *TreeNode) (vals []int) { + var preorder func(*TreeNode) + preorder = func(node *TreeNode) { + if node == nil { + return + } + vals = append(vals, node.Val) + preorder(node.Left) + preorder(node.Right) + } + preorder(root) + return +} + +//迭代 +func preorderTraversal2(root *TreeNode) (vals []int) { + stack := []*TreeNode{} + node := root + for node != nil || len(stack) > 0 { + for node != nil { + vals = append(vals, node.Val) + stack = append(stack, node) + node = node.Left + } + node = stack[len(stack)-1].Right + stack = stack[:len(stack)-1] + } + return +} + diff --git "a/Week_02/\345\211\215K\344\270\252\351\253\230\351\242\221\345\205\203\347\264\240.go" "b/Week_02/\345\211\215K\344\270\252\351\253\230\351\242\221\345\205\203\347\264\240.go" new file mode 100644 index 0000000..14525ae --- /dev/null +++ "b/Week_02/\345\211\215K\344\270\252\351\253\230\351\242\221\345\205\203\347\264\240.go" @@ -0,0 +1,40 @@ +/** + @author: dingfeng + @date: 2021/1/10 + @note: +**/ +package Week_02 + +import "container/heap" + +//堆 + +func topKFrequent(nums []int, k int) []int { + occurrences := map[int]int{} + for _, num := range nums { + occurrences[num]++ + } + h := &IHeap{} + heap.Init(h) + for key, value := range occurrences { + heap.Push(h, [2]int{key, value}) + if h.Len() > k { + heap.Pop(h) + } + } + ret := make([]int, k) + for i := 0; i < k; i++ { + ret[k - i - 1] = heap.Pop(h).([2]int)[0] + } + return ret +} + +type IHeap [][2]int + +func (h IHeap) Len() int { return len(h) } +func (h IHeap) Less(i, j int) bool { return h[i][1] < h[j][1] } +func (h IHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] } + +func (h *IHeap) Push(x interface{}) { + *h = append(*h, x.([2]int)) +} diff --git "a/Week_02/\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215\345\210\206\347\273\204.go" "b/Week_02/\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215\345\210\206\347\273\204.go" new file mode 100644 index 0000000..91d09ef --- /dev/null +++ "b/Week_02/\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215\345\210\206\347\273\204.go" @@ -0,0 +1,44 @@ +/** + @author: dingfeng + @date: 2021/1/10 + @note: +**/ +package Week_02 + +import "sort" + +//排序 +func groupAnagrams(strs []string) [][]string { + mp := map[string][]string{} + for _, str := range strs { + s := []byte(str) + sort.Slice(s, func(i, j int) bool { + return s[i] < s[j] + }) + sortedStr := string(s) + mp[sortedStr] = append(mp[sortedStr],str) + } + ans:=[][]string{} + for _, v := range mp { + ans = append(ans, v) + } + return ans +} + +//计数 +func groupAnagrams2(strs []string) [][]string { + mp := map[[26]int][]string{} + for _,str:=range strs{ + cnt := [26]int{} + for _,b:=range str{ + cnt[b-'a']++ + } + mp[cnt] = append(mp[cnt],str) + } + ans:=[][]string{} + for _, v := range mp { + ans = append(ans, v) + } + return ans + +} \ No newline at end of file diff --git "a/Week_02/\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.go" "b/Week_02/\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.go" new file mode 100644 index 0000000..0aef2fb --- /dev/null +++ "b/Week_02/\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215.go" @@ -0,0 +1,62 @@ +/** + @author: dingfeng + @date: 2021/1/10 + @note: +**/ +package Week_02 + +import "sort" + +// hash +func isAnagram(s string, t string) bool { + if len(s) != len(t) { + return false + } + hash := map[string]int{} + for i := 0; i < len(s); i++ { + ch := string(s[i]) + if _, ok := hash[ch]; ok { + hash[ch]++ + } else { + hash[ch] = 1 + } + } + for j := 0; j < len(t); j++ { + ch := string(t[j]) + if _, ok := hash[ch]; ok { + hash[ch]-- + if hash[ch] < 0 { + return false + } + } else { + return false + } + } + return true +} + +// 方法二 排序 +func isAnagram2(s, t string) bool { + s1, s2 := []byte(s), []byte(t) + sort.Slice(s1, func(i, j int) bool { return s1[i] < s1[j] }) + sort.Slice(s2, func(i, j int) bool { return s2[i] < s2[j] }) + return string(s1) == string(s2) +} + + +func isAnagram3(s, t string) bool { + var alphabet [26]int + for _,item:=range s{ + alphabet[item-'a']++ + } + for _,item:=range t{ + alphabet[item-'a']-- + } + for _,item:=range alphabet{ + if item!=0{ + return false + } + } + return true +} + diff --git a/Week_03/README.md b/Week_03/README.md index 50de304..a141baa 100644 --- a/Week_03/README.md +++ b/Week_03/README.md @@ -1 +1,2 @@ -学习笔记 \ No newline at end of file +学习笔记 +这周主要的难点就在于递归,之前在工作中很少用到,所以现在刚碰到还是有很多疑问,希望后续通过不断的加强学习,能熟练掌握递归。 \ No newline at end of file diff --git "a/Week_03/\344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\350\277\221\345\205\254\345\205\261\347\245\226\345\205\210.go" "b/Week_03/\344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\350\277\221\345\205\254\345\205\261\347\245\226\345\205\210.go" new file mode 100644 index 0000000..6a33457 --- /dev/null +++ "b/Week_03/\344\272\214\345\217\211\346\240\221\347\232\204\346\234\200\350\277\221\345\205\254\345\205\261\347\245\226\345\205\210.go" @@ -0,0 +1,30 @@ +/** + @author: dingfeng + @date: 2021/1/17 + @note: +**/ +package Week_03 + +//type TreeNode struct { +// Val int +// Left *TreeNode +// Right *TreeNode +//} + +func LowestCommonAncestor(root, p, q *TreeNode) *TreeNode { + if root == nil { + return nil + } + if root.Val == p.Val || root.Val == q.Val { + return root + } + left := LowestCommonAncestor(root.Left, p, q) + right := LowestCommonAncestor(root.Right, p, q) + if left != nil && right != nil { + return root + } + if left == nil { + return right + } + return left +} diff --git "a/Week_03/\345\205\250\346\216\222\345\210\227.go" "b/Week_03/\345\205\250\346\216\222\345\210\227.go" new file mode 100644 index 0000000..8f37d33 --- /dev/null +++ "b/Week_03/\345\205\250\346\216\222\345\210\227.go" @@ -0,0 +1,35 @@ +/** + @author: dingfeng + @date: 2021/1/17 + @note: +**/ +package Week_03 + +//dfs +func Permute(nums []int) [][]int { + //append 应该要好好去学学 + var res [][]int + var path []int + var dfs func(depth int,used []bool,path []int) + dfs = func(depth int, used []bool, path []int) { + if len(nums) == depth{ + var temp []int + temp = append(temp,path...) + res = append(res, temp) + return + } + for i:=0;i 0 && nums[i] == nums[i-1] && used[i-1] == false) { + continue + } + used[i] = true + path = append(path, nums[i]) + dfs(depth+1, used, path) + used[i] = false + path = path[:len(path)-1] + + } + } + dfs(0, make([]bool, len(nums)), path) + return res + +} diff --git "a/Week_03/\346\213\254\345\217\267\347\224\237\346\210\220.go" "b/Week_03/\346\213\254\345\217\267\347\224\237\346\210\220.go" new file mode 100644 index 0000000..1a102d6 --- /dev/null +++ "b/Week_03/\346\213\254\345\217\267\347\224\237\346\210\220.go" @@ -0,0 +1,67 @@ +/** + @author: dingfeng + @date: 2021/1/15 + @note: +**/ +package Week_03 + +func GenerateParenthesis(n int) []string { + res := []string{} + generatePar(0, 0, n, "", &res) + return res +} + +// APPEND的一个大坑 切片不一定是原引用 可以用*来解决 +func generatePar(left, right, n int, s string, ss *[]string) { + //terminator + if left == n && right == n { + *ss = append(*ss, s) + return + } + if left < n { + //drill down + generatePar(left+1, right, n, s+"(", ss) + } + if right < left { + //drill down + generatePar(left, right+1, n, s+")", ss) + } + //reverse state +} + +var res []string +func GenerateParenthesis2(n int) []string { + generatePar2(0, 0, n, "") + return res +} +func generatePar2(left, right, n int, s string) { + if left == n && right == n { + res = append(res, s) + return + } + if left < n { + generatePar2(left+1, right, n, s+"(") + } + if right < left { + generatePar2(left, right+1, n, s+")") + } +} + +func GenerateParenthesis3(n int) []string { + res := []string{} + var dfs func(left, right, n int, s string) + dfs = func(left, right, n int, s string){ + if left == n && right == n { + res = append(res, s) + return + } + if left < n { + dfs(left+1, right, n, s+"(") + } + if right < left { + dfs(left, right+1, n, s+")") + } + } + dfs(0, 0, n, "") + return res +} diff --git "a/Week_03/\347\210\254\346\245\274\346\242\257.go" "b/Week_03/\347\210\254\346\245\274\346\242\257.go" new file mode 100644 index 0000000..073fb18 --- /dev/null +++ "b/Week_03/\347\210\254\346\245\274\346\242\257.go" @@ -0,0 +1,44 @@ +/** + @author: dingfeng + @date: 2021/1/15 + @note: +**/ +package Week_03 + +//动态规划 +func climbStairs(n int) int { + dp := make([]int, n+1) + dp[0] = 1 + dp[1] = 1 + for i := 2; i <= n; i++ { + dp[i] = dp[i-1] + dp[i-2] + } + return dp[n] +} +// 动态规划优化(节约内存) +func climbStairs2(n int) int { + p:=0;q:=0;r:=1 + for i := 0; i < n; i++ { + p = q + q = r + r = p+q + } + return r +} +// 递归 +func climbStairs3(n int) int { + if n < 3{ + return n + } + return climbStairs3(n-1)+climbStairs3(n-2) +} +// 递归转尾递归 +func climbStairs4(n int) int { + return Fibonacci(n, 1, 1) +} +func Fibonacci (n,a,b int)int { + if n <= 1 { + return b + } + return Fibonacci(n - 1, b, a + b) +} \ No newline at end of file diff --git "a/Week_03/\347\273\204\345\220\210.go" "b/Week_03/\347\273\204\345\220\210.go" new file mode 100644 index 0000000..80af1b9 --- /dev/null +++ "b/Week_03/\347\273\204\345\220\210.go" @@ -0,0 +1,29 @@ +/** + @author: dingfeng + @date: 2021/1/17 + @note: +**/ +package Week_03 + +func Combine(n int, k int) [][]int { + + if n < 0 || k > n { + return nil + } + + var res [][]int + var dfs func(n, k, begin int, path []int) + dfs = func(n, k, begin int, path []int) { + if len(path) == k { + res = append(res, append([]int{}, path...)) + return + } + for i := begin; i <= n; i++ { + path = append(path, i) + dfs(n, k, i+1, path) + path = path[:len(path)-1] + } + } + dfs(n,k,1,[]int{}) + return res +} diff --git "a/Week_03/\347\277\273\350\275\254\344\272\214\345\217\211\346\240\221.go" "b/Week_03/\347\277\273\350\275\254\344\272\214\345\217\211\346\240\221.go" new file mode 100644 index 0000000..83141a8 --- /dev/null +++ "b/Week_03/\347\277\273\350\275\254\344\272\214\345\217\211\346\240\221.go" @@ -0,0 +1,56 @@ +/** + @author: dingfeng + @date: 2021/1/15 + @note: +**/ +package Week_03 + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + + +//dfs +func InvertTree(root *TreeNode) *TreeNode { + //terminator + if root == nil{ + return nil + } + //process logic + temp := root.Left + root.Left = root.Right + root.Right = temp + //drill down + InvertTree(root.Left) + InvertTree(root.Right) + return root + //reverse state +} + +//bfs +func InvertTree2(root *TreeNode) *TreeNode { + if root == nil{ + return nil + } + queue := []*TreeNode{root} + for len(queue) == 0 { + tmp:=queue[0] + queue = queue[1:] + left := tmp.Left + tmp.Left = tmp.Right + tmp.Right = left + if tmp.Left != nil{ + queue = append(queue, tmp.Left) + } + if tmp.Right != nil{ + queue = append(queue,tmp.Right) + } + } + return root + + +} + + diff --git a/Week_04/README.md b/Week_04/README.md index 50de304..2fbcbcc 100644 --- a/Week_04/README.md +++ b/Week_04/README.md @@ -1 +1,3 @@ -学习笔记 \ No newline at end of file +学习笔记 +这周比较忙,投入不够多。后续会投入更多时间,好好复习这周的内容。最近四周的学习中,发现有几个题目非常难以理解,例如寻找最近的公共祖先,需要不断的练习,形成肌肉记忆。 +在这里,我想提个问题那就是有没有这个必要两种语言(java和golang)把所有的题目都实现一遍? \ No newline at end of file diff --git "a/Week_04/\344\271\260\345\215\226\350\202\241\347\245\250\347\232\204\346\234\200\344\275\263\346\227\266\346\234\272II.java" "b/Week_04/\344\271\260\345\215\226\350\202\241\347\245\250\347\232\204\346\234\200\344\275\263\346\227\266\346\234\272II.java" new file mode 100644 index 0000000..b6ff6af --- /dev/null +++ "b/Week_04/\344\271\260\345\215\226\350\202\241\347\245\250\347\232\204\346\234\200\344\275\263\346\227\266\346\234\272II.java" @@ -0,0 +1,9 @@ +public class 买卖股票的最佳时机II { + public int maxProfit(int[] prices) { + int ans = 0; + for (int i = 1; i < prices.length; i++) { + ans += Math.max(0, prices[i] - prices[i - 1]); + } + return ans; + } +} diff --git "a/Week_04/\346\237\240\346\252\254\346\260\264\346\211\276\351\233\266860.java" "b/Week_04/\346\237\240\346\252\254\346\260\264\346\211\276\351\233\266860.java" new file mode 100644 index 0000000..f7f5b2c --- /dev/null +++ "b/Week_04/\346\237\240\346\252\254\346\260\264\346\211\276\351\233\266860.java" @@ -0,0 +1,29 @@ +public class 柠檬水找零860 { + public boolean lemonadeChange(int[] bills) { + + int five = 0; + int ten = 0; + for (int bill : bills) { + if (bill == 5) { + five++; + }else if (bill == 10){ + if (five == 0){ + return false; + } + five--; + ten++; + }else { + if (five>=1 && ten>=1){ + five--; + ten--; + }else if (five>=3){ + five -= 3; + }else{ + return false; + } + } + } + + return true; + } +} diff --git "a/Week_04/\347\254\254k\344\270\252\346\225\260.java" "b/Week_04/\347\254\254k\344\270\252\346\225\260.java" new file mode 100644 index 0000000..f21d211 --- /dev/null +++ "b/Week_04/\347\254\254k\344\270\252\346\225\260.java" @@ -0,0 +1,17 @@ +public class 第k个数 { + public int getKthMagicNumber(int k) { + int[] dp = new int[k]; + int p3 = 0, p5 = 0, p7 = 0; + dp[0] =1; + for (int i = 1; i < k; i++) { + // 选出最小的数字 + dp[i] = Math.min(dp[p3] * 3, Math.min(dp[p5] * 5, dp[p7] * 7)); + // 将该数字对应的指针向前移动一步。 + if( dp[i] == dp[p3] * 3 ) p3++; + if( dp[i] == dp[p5] * 5 ) p5++; + if( dp[i] == dp[p7] * 7 ) p7++; + } + return dp[k-1]; + + } +} diff --git "a/Week_04/\350\267\263\350\267\203\346\270\270\346\210\217II45.java" "b/Week_04/\350\267\263\350\267\203\346\270\270\346\210\217II45.java" new file mode 100644 index 0000000..f128e1f --- /dev/null +++ "b/Week_04/\350\267\263\350\267\203\346\270\270\346\210\217II45.java" @@ -0,0 +1,45 @@ +public class 跳跃游戏II45 { + //时间复杂度:O(n^2),其中 n 是数组长度。有两层嵌套循环,在最坏的情况下,例如数组中的所有元素都是 1, + // position 需要遍历数组中的每个位置,对于 position 的每个值都有一次循环。 + //空间复杂度:O(1)。 + //反向查找 + public int jump(int[] nums) { + int position = nums.length - 1; + int step = 0; + while (position > 0) { + for (int i = 0; i < position; i++) { + if ((nums[i] + i) >= position) { + step++; + position = i; + break; + } + } + } + return step; + } + +//时间复杂度:O(n),其中 nn 是数组长度。 +// +//空间复杂度:O(1)。 + public int Jump2(int[] nums) { + int length = nums.length; + int end = 0; + int maxPosition = 0; + int steps = 0; + for (int i = 0; i < length-1; i++) { + maxPosition = Math.max(maxPosition, i + nums[i]); + if (i == end) { + end = maxPosition; + steps++; + } + } + return steps; + } + + public static void main(String[] args) { + int[] arr = {2,3,1,2,4,2,3}; + 跳跃游戏II45 t = new 跳跃游戏II45(); + t.Jump2(arr); + } + +} diff --git a/Week_05/foo.go b/Week_05/foo.go new file mode 100644 index 0000000..7cd7c80 --- /dev/null +++ b/Week_05/foo.go @@ -0,0 +1,18 @@ +/** + @author: dingfeng + @date: 2021/1/25 + @note: +**/ +package Week_05 + +func foo(key, val int, store map[int]int) int{ + if v, ok := store[key]; ok { + if val == v { + return 1 + } + return 2 + }else{ + store[key] = val + return 0 + } +} diff --git a/Week_06/README.md b/Week_06/README.md index 50de304..4191965 100644 --- a/Week_06/README.md +++ b/Week_06/README.md @@ -1 +1,8 @@ -学习笔记 \ No newline at end of file +学习笔记 +dp得自上而下去思考来分解成子问题,但是得自下而上去计算避免重复运算; +golang 只有slice 而java有queue 所以在实现的时候能按照Java的思路来做,但是一些细节还有注意一下 +例如 queue中的poll 永远只取第一个element,而且整个队列的lenth减一,但是如果slice[i]去取就要注意了, +小心数组越界;不过可以一直用slice[0] +或者用下面的方法,先取,不删除,for循环遍历完成后一起删除 +poll 操作等于取值+删除两个动作,而slice[i]只是其中的取,所以一定要记得删除, +至于你是立马删除,还是延后删除怎么方便怎么来 \ No newline at end of file diff --git "a/Week_06/\345\233\236\346\226\207\345\255\220\344\270\262647.go" "b/Week_06/\345\233\236\346\226\207\345\255\220\344\270\262647.go" new file mode 100644 index 0000000..e36861c --- /dev/null +++ "b/Week_06/\345\233\236\346\226\207\345\255\220\344\270\262647.go" @@ -0,0 +1,33 @@ +/** + @author: dingfeng + @date: 2021/2/6 + @note: +**/ +package leetcode + +/* +动态规划 +dp[i][j] 表示s[i,j]的子串是不是回文字符串 +*/ +func CountSubstrings(s string) int { + dp := make([][]bool, len(s)) + for i := 0; i < len(dp); i++ { + dp[i] = make([]bool, len(s)) + } + count:=0 + for j := 0; j < len(s); j++ { + for i := 0; i <= j; i++ { + if i == j { + dp[i][j] = true + count++ + } else if j-i == 1 && s[i] == s[j] { + dp[i][j] = true + count++ + } else if j-i > 1 && s[i] == s[j] && dp[i+1][j-1] { + dp[i][j] = true + count++ + } + } + } + return count +} diff --git "a/Week_06/\346\234\200\345\244\247\346\255\243\346\226\271\345\275\242221.go" "b/Week_06/\346\234\200\345\244\247\346\255\243\346\226\271\345\275\242221.go" new file mode 100644 index 0000000..52032a4 --- /dev/null +++ "b/Week_06/\346\234\200\345\244\247\346\255\243\346\226\271\345\275\242221.go" @@ -0,0 +1,104 @@ +/** + @author: dingfeng + @date: 2021/2/6 + @note: +**/ +package leetcode + +/* +暴力求解 +时间复杂度:O(mnmin(m,n)^2),其中 m 和 n 是矩阵的行数和列数。 + +需要遍历整个矩阵寻找每个 1,遍历矩阵的时间复杂度是 O(mn)。 +对于每个可能的正方形,其边长不超过 m 和 n 中的最小值,需要遍历该正 +方形中的每个元素判断是不是只包含 1,遍历正方形时间复杂度是 O(mn min(m,n)^2) + +总时间复杂度是 O(mn min(m,n)^2) + +空间复杂度:O(1)。额外使用的空间复杂度为常数。 + +*/ +func maximalSquare(matrix [][]byte) int { + + row := len(matrix) + if row == 0 { + return 0 + } + column := len(matrix[0]) + if column == 0 { + return 0 + } + maxside := 0 + for i := 0; i < row; i++ { + for j := 0; j < column; j++ { + if matrix[i][j] == '1' { + maxside = max(maxside, 1) + currmaxside := min(row-i, column-j) + for k := 1; k < currmaxside; k++ { + flag := true + if matrix[i+k][j+k] == '0' { + break + } + for m := 0; m < k; m++ { + if matrix[i+m][j+k] == '0' || matrix[i+k][j+m] == '0' { + flag = false + break + } + } + if flag { + maxside = max(maxside, k+1) + } else { + break + } + + } + } + } + + } + + return maxside * maxside +} + +/* +可以用动态规划来解决 +if a[i][j] == '1' +dp[i][j] = min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1 +if a[i][j] == '0' +dp[i][j] = 0 +dp[i][j]表示以i和j为右下角组成的最大正方形 +*/ +func maximalSquare2(matrix [][]byte) int { + row := len(matrix) + if row == 0 { + return 0 + } + column := len(matrix[0]) + if column == 0 { + return 0 + } + + dp := make([][]int, row) + for i := 0; i < len(dp); i++ { + dp[i] = make([]int, column) + } + maxside := 0 + for i := 0; i < row; i++ { + for j := 0; j < column; j++ { + if matrix[i][j] == '0' { + dp[i][j] = 0 + } else { + if i == 0 { + dp[i][j] = 1 + } else if j == 0 { + dp[i][j] = 1 + } else { + dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1 + } + } + maxside = max(maxside, dp[i][j]) + } + } + return maxside * maxside + +} diff --git "a/Week_06/\346\234\200\345\260\217\350\267\257\345\276\204\345\222\21464.go" "b/Week_06/\346\234\200\345\260\217\350\267\257\345\276\204\345\222\21464.go" new file mode 100644 index 0000000..ded38d5 --- /dev/null +++ "b/Week_06/\346\234\200\345\260\217\350\267\257\345\276\204\345\222\21464.go" @@ -0,0 +1,36 @@ +/** + @author: dingfeng + @date: 2021/2/5 + @note: +**/ +package leetcode + +/* +动态规划 +状态转移方程 +f(x,y) = min(f(x-1,y),f(x,y-1)+grid(x,y) +复杂度分析 + +时间复杂度:O(mn),其中 m 和 n 分别是网格的行数和列数。需要对整个网格遍历一次,计算dp 的每个元素的值。 + +空间复杂度:O(mn),其中 m 和 n 分别是网格的行数和列数。创建一个二维数组 dp,和网格大小相同。 +空间复杂度可以优化,例如每次只存储上一行的}dp 值,则可以将空间复杂度优化到 O(n)。 + +*/ +func MinPathSum(grid [][]int) int { + n := len(grid) + m := len(grid[0]) + dp := grid + for i := 1; i < len(grid); i++ { + dp[i][0] += dp[i-1][0] + } + for i := 1; i < len(grid[0]); i++ { + dp[0][i] += dp[0][i-1] + } + for i := 1; i < n; i++ { + for j := 1; j < m; j++ { + dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + grid[i][j] + } + } + return dp[n-1][m-1] +} diff --git "a/Week_06/\350\247\243\347\240\201\346\226\271\346\263\22591.go" "b/Week_06/\350\247\243\347\240\201\346\226\271\346\263\22591.go" new file mode 100644 index 0000000..495ed5b --- /dev/null +++ "b/Week_06/\350\247\243\347\240\201\346\226\271\346\263\22591.go" @@ -0,0 +1,50 @@ +/** + @author: dingfeng + @date: 2021/2/6 + @note: +**/ +package leetcode + +import ( + "strings" +) + +/* +动态规划 +F[i] = F[i-1]+1 +F[i] = F[i-2]+1 +*/ +func NumDecodings(s string) int { + if strings.HasPrefix(s, "0") { + return 0 + } + dp := make([]int, len(s)) + dp[0] = 1 + if len(s) >= 2 { + if s[0] > 50 && s[1] == '0' { + return 0 + } + dp[1] = 1 + if s[1] != '0' { + if s[0] == '1' || s[0] == '2' && s[1] <= 54 { + dp[1] = 2 + } + } + } + + for i := 2; i < len(s); i++ { + if s[i] == '0' && s[i-1] != '1' && s[i-1] != '2' { + return 0 + } + if s[i] != '0' { + dp[i] = dp[i-1] + if (s[i-1] == '2' && s[i] <= 54) || (s[i-1] == '1') { + dp[i] += dp[i-2] + } + } else { + dp[i] = dp[i-2] + } + } + return dp[len(s)-1] + +} diff --git a/Week_07/README.md b/Week_07/README.md index 50de304..3e89194 100644 --- a/Week_07/README.md +++ b/Week_07/README.md @@ -1 +1,5 @@ -学习笔记 \ No newline at end of file +学习笔记 +本周的课中启发式搜索个人感觉还是不太理解,希望后续助教或者超哥能在群里在讨论下。 +另外发现前面学习的算法和数据结构 +,经过一个春节之后,会忘记大部分。很多学过的算法都要重新再看一遍,这就很头疼。 +(在前期的学习中,我也非常认真,当时也都理解并且掌握了,但是过一段时间不接触又不知道咋写了) diff --git "a/Week_07/\345\215\225\350\257\215\346\216\245\351\276\231127.go" "b/Week_07/\345\215\225\350\257\215\346\216\245\351\276\231127.go" new file mode 100644 index 0000000..fe8b4e6 --- /dev/null +++ "b/Week_07/\345\215\225\350\257\215\346\216\245\351\276\231127.go" @@ -0,0 +1,11 @@ +/** + @author: dingfeng + @date: 2021/1/26 + @note: +**/ +package leetcode + + +//func ladderLength(beginWord string, endWord string, wordList []string) int { +// +//} \ No newline at end of file diff --git "a/Week_07/\345\262\233\345\261\277\346\225\260\351\207\217200/Solution.java" "b/Week_07/\345\262\233\345\261\277\346\225\260\351\207\217200/Solution.java" new file mode 100644 index 0000000..0f8c0af --- /dev/null +++ "b/Week_07/\345\262\233\345\261\277\346\225\260\351\207\217200/Solution.java" @@ -0,0 +1,71 @@ +package 岛屿数量200; + +public class Solution { + // private int m; +// private int n; + public int NumIslands(char[][] grid) { + int m = grid.length; + if (m == 0) return 0; + int n = grid[0].length; + if (n == 0) return 0; + int count = 0; + for (int i = 0; i < grid.length; i++) { + for (int j = 0; j < grid[i].length; j++) { + if (grid[i][j] == '1') { + dfs(m, n, i, j, grid); + count++; + } + } + } + System.out.println(count); + return count; + + } + + private void dfs(int m, int n, int i, int j, char[][] grid) { + if (i < 0 || j < 0 || i >= m || j >= n || grid[i][j] != '1') { + return; + } + //process logic + grid[i][j] = 0; + //drill down + dfs(m, n, i + 1, j, grid); + dfs(m, n, i - 1, j, grid); + dfs(m, n, i, j + 1, grid); + dfs(m, n, i, j - 1, grid); + } + + + //第二遍 + public int numIslands2(char[][] grid) { + + int m = grid.length; + if (m == 0) return m; + int n = grid[0].length; + if (n == 0) return n; + int count = 0; + for (int i = 0; i < m; i++) { + for (int j = 0; j < n; j++) { + if (grid[i][j] == '1') { + count++; + dfs2(m, n, i, j, grid); + } + } + } + + return count; + + } + + private void dfs2(int m, int n, int i, int j, char[][] grid) { + if (i < 0 || j < 0 || i >= m || j >= n || grid[i][j] != '1') { + return; + } + grid[i][j] = '0'; + dfs2(m, n, i + 1, j, grid); + dfs2(m, n, i - 1, j, grid); + dfs2(m, n, i, j + 1, grid); + dfs2(m, n, i, j - 1, grid); + } + +} diff --git "a/Week_07/\346\213\254\345\217\267\347\224\237\346\210\22022.go" "b/Week_07/\346\213\254\345\217\267\347\224\237\346\210\22022.go" new file mode 100644 index 0000000..6c8dc7e --- /dev/null +++ "b/Week_07/\346\213\254\345\217\267\347\224\237\346\210\22022.go" @@ -0,0 +1,69 @@ +/** + @author: dingfeng + @date: 2021/1/28 + @note: +**/ +package leetcode + +//dfs +func generateParenthesis(n int) []string { + var res []string + var dfs func(left, right, n int, s string) + dfs = func(left, right, n int, s string) { + if left == n && right == n { + res = append(res, s) + return + } + if left < n { + dfs(left+1, right, n, s+"(") + } + if right < left { + dfs(left, right+1, n, s+")") + } + } + dfs(0, 0, n, "") + return res +} + +type Node struct { + left int + right int + str string +} + +//bfs +func GenerateParenthesis2(n int) []string { + var res []string + queue := []*Node{{ + left: 0, + right: 0, + str: "", + }} + for len(queue) > 0 { + lenth := len(queue) + for i := 0; i < lenth; i++ { + currnode := queue[i] + if currnode.left == n && currnode.right == n { + res = append(res, currnode.str) + } + if currnode.left < n { + queue = append(queue, &Node{ + left: currnode.left + 1, + right: currnode.right, + str: currnode.str + "(", + }) + } + if currnode.right < currnode.left { + //if currnode.right < currnode.left && currnode.right < n { + queue = append(queue, &Node{ + left: currnode.left, + right: currnode.right + 1, + str: currnode.str + ")", + }) + } + + } + queue = queue[lenth:] + } + return res +} diff --git "a/Week_07/\346\234\200\345\260\217\345\237\272\345\233\240\345\217\230\345\214\226433.go" "b/Week_07/\346\234\200\345\260\217\345\237\272\345\233\240\345\217\230\345\214\226433.go" new file mode 100644 index 0000000..5f9d910 --- /dev/null +++ "b/Week_07/\346\234\200\345\260\217\345\237\272\345\233\240\345\217\230\345\214\226433.go" @@ -0,0 +1,47 @@ +/** + @author: dingfeng + @date: 2021/1/27 + @note: +**/ +package leetcode + +func minMutation(start string, end string, bank []string) int { + bankmap := make(map[string]bool) + for _, item := range bank { + bankmap[item] = true + } + if _, ok := bankmap[end]; !ok { + return -1 + } + four := []byte{'A', 'C', 'G', 'T'} + step := 0 + queue := []string{start} + for len(queue) > 0 { + step++ + n := len(queue) + for i := 0; i < n; i++ { + currstr := queue[i] + for j := 0; j < len(currstr); j++ { + //oldchar := currstr[j] + for k := 0; k < len(four); k++ { + var transtr string + if j+1 == len(currstr) { + transtr = currstr[:j] + string(four[k]) + } else { + transtr = currstr[:j] + string(four[k]) + currstr[j+1:] + } + if transtr == end { + return step + } + if _, ok := bankmap[transtr]; ok { + queue = append(queue, transtr) + delete(bankmap, transtr) + } + } + } + } + //出对列 + queue = queue[n:] + } + return -1 +} diff --git "a/Week_08/191\344\275\2151\347\232\204\344\270\252\346\225\260.go" "b/Week_08/191\344\275\2151\347\232\204\344\270\252\346\225\260.go" new file mode 100644 index 0000000..8d795c7 --- /dev/null +++ "b/Week_08/191\344\275\2151\347\232\204\344\270\252\346\225\260.go" @@ -0,0 +1,10 @@ +package Week_08 +func hammingWeight(num uint32) int { + count:=0 + for num!=0{ + count++ + // 去除最低位的1 + num = num & (num-1) + } + return count +} diff --git "a/Week_08/2\347\232\204\345\271\202231.go" "b/Week_08/2\347\232\204\345\271\202231.go" new file mode 100644 index 0000000..7f2dc33 --- /dev/null +++ "b/Week_08/2\347\232\204\345\271\202231.go" @@ -0,0 +1,4 @@ +package Week_08 +func isPowerOfTwo(n int) bool { + return n!=0 && n&(n-1)==0 +} diff --git "a/Week_08/LRU \347\274\223\345\255\230\346\234\272\345\210\266146.go" "b/Week_08/LRU \347\274\223\345\255\230\346\234\272\345\210\266146.go" new file mode 100644 index 0000000..8450d5f --- /dev/null +++ "b/Week_08/LRU \347\274\223\345\255\230\346\234\272\345\210\266146.go" @@ -0,0 +1,83 @@ +package Week_08 + +type LRUCache struct { + size int + capacity int + cache map[int]*DLinkedNode + head, tail *DLinkedNode +} + +type DLinkedNode struct { + key, value int + prev, next *DLinkedNode +} + +func initDLinkedNode(key, value int) *DLinkedNode { + return &DLinkedNode{ + key: key, + value: value, + } +} + +func Constructor(capacity int) LRUCache { + l := LRUCache{ + cache: map[int]*DLinkedNode{}, + head: initDLinkedNode(0, 0), + tail: initDLinkedNode(0, 0), + capacity: capacity, + } + l.head.next = l.tail + l.tail.prev = l.head + return l +} + +func (this *LRUCache) Get(key int) int { + if _, ok := this.cache[key]; !ok { + return -1 + } + node := this.cache[key] + this.moveToHead(node) + return node.value +} + + +func (this *LRUCache) Put(key int, value int) { + if _, ok := this.cache[key]; !ok { + node := initDLinkedNode(key, value) + this.cache[key] = node + this.addToHead(node) + this.size++ + if this.size > this.capacity { + removed := this.removeTail() + delete(this.cache, removed.key) + this.size-- + } + } else { + node := this.cache[key] + node.value = value + this.moveToHead(node) + } +} + +func (this *LRUCache) addToHead(node *DLinkedNode) { + node.prev = this.head + node.next = this.head.next + this.head.next.prev = node + this.head.next = node +} + +func (this *LRUCache) removeNode(node *DLinkedNode) { + node.prev.next = node.next + node.next.prev = node.prev +} + +func (this *LRUCache) moveToHead(node *DLinkedNode) { + this.removeNode(node) + this.addToHead(node) +} + +func (this *LRUCache) removeTail() *DLinkedNode { + node := this.tail.prev + this.removeNode(node) + return node +} diff --git a/Week_08/README.md b/Week_08/README.md index 50de304..f3ff28f 100644 --- a/Week_08/README.md +++ b/Week_08/README.md @@ -1 +1,2 @@ -学习笔记 \ No newline at end of file +学习笔记 +这周掌握了印象比较深刻的就是位运算的课程,非计算机专业出身,所以学了这节课之后,也使我受益匪浅。另外排序算法这一块,听了课程之后都懂,但是遇到具体排序问题时,灵活选择最合适的排序算法还是不太会。 \ No newline at end of file diff --git "a/Week_08/\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215242.go" "b/Week_08/\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215242.go" new file mode 100644 index 0000000..ebdef12 --- /dev/null +++ "b/Week_08/\346\234\211\346\225\210\347\232\204\345\255\227\346\257\215\345\274\202\344\275\215\350\257\215242.go" @@ -0,0 +1,11 @@ +package Week_08 + +import "sort" + +func isAnagram(s string, t string) bool { + s1, s2 := []byte(s), []byte(t) + sort.Slice(s1, func(i, j int) bool { return s1[i] < s1[j] }) + sort.Slice(s2, func(i, j int) bool { return s2[i] < s2[j] }) + return string(s1) == string(s2) + +} diff --git "a/Week_08/\351\242\240\345\200\222\344\272\214\350\277\233\345\210\266\344\275\215190.go" "b/Week_08/\351\242\240\345\200\222\344\272\214\350\277\233\345\210\266\344\275\215190.go" new file mode 100644 index 0000000..c2ed1f7 --- /dev/null +++ "b/Week_08/\351\242\240\345\200\222\344\272\214\350\277\233\345\210\266\344\275\215190.go" @@ -0,0 +1,11 @@ +package Week_08 +func reverseBits(num uint32) uint32 { + var bitsize uint = 31 + var ans uint32 + for num != 0{ + ans += (num & 1 << bitsize) + bitsize-- + num = num >> 1 + } + return ans +} diff --git a/Week_09/README.md b/Week_09/README.md index 50de304..31cc365 100644 --- a/Week_09/README.md +++ b/Week_09/README.md @@ -1 +1,2 @@ -学习笔记 \ No newline at end of file +学习笔记 +这周时间比较紧张,题目做的比较少,后面会用五毒神掌,多过遍数。 \ No newline at end of file diff --git "a/Week_09/\344\273\205\344\273\205\345\217\215\350\275\254\345\255\227\346\257\215917.go" "b/Week_09/\344\273\205\344\273\205\345\217\215\350\275\254\345\255\227\346\257\215917.go" new file mode 100644 index 0000000..81ad6dc --- /dev/null +++ "b/Week_09/\344\273\205\344\273\205\345\217\215\350\275\254\345\255\227\346\257\215917.go" @@ -0,0 +1,29 @@ +/** + @author: dingfeng + @date: 2021/3/7 + @note: +**/ +package leetcode +func reverseOnlyLetters(S string) string { + buf := []byte(S) + for i, j := 0, len(buf)-1; i < j; { + for i < j && !isLetter(buf[i]) { + i++ + } + for i < j && !isLetter(buf[j]) { + j-- + } + buf[i], buf[j] = buf[j], buf[i] + i++ + j-- + } + return string(buf) +} + +func isLetter(c byte) bool { + if c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' { + return true + } + return false +} + diff --git "a/Week_09/\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\347\254\254\344\270\200\344\270\252\345\224\257\344\270\200\345\255\227\347\254\246387.go" "b/Week_09/\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\347\254\254\344\270\200\344\270\252\345\224\257\344\270\200\345\255\227\347\254\246387.go" new file mode 100644 index 0000000..3651282 --- /dev/null +++ "b/Week_09/\345\255\227\347\254\246\344\270\262\344\270\255\347\232\204\347\254\254\344\270\200\344\270\252\345\224\257\344\270\200\345\255\227\347\254\246387.go" @@ -0,0 +1,18 @@ +/** + @author: dingfeng + @date: 2021/3/7 + @note: +**/ +package leetcode +func firstUniqChar(s string) int { + cnt := [26]int{} + for _, ch := range s { + cnt[ch-'a']++ + } + for i, ch := range s { + if cnt[ch-'a'] == 1 { + return i + } + } + return -1 +} \ No newline at end of file diff --git "a/Week_09/\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\24658.go" "b/Week_09/\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\24658.go" new file mode 100644 index 0000000..f71834a --- /dev/null +++ "b/Week_09/\346\234\200\345\220\216\344\270\200\344\270\252\345\215\225\350\257\215\347\232\204\351\225\277\345\272\24658.go" @@ -0,0 +1,16 @@ +/** + @author: dingfeng + @date: 2021/3/5 + @note: +**/ +package leetcode + +func lengthOfLastWord(s string) int { + maxindex := 0 + for i := 0; i < len(s); i++ { + if s[i] == ' ' { + maxindex = i + } + } + return len(s)-maxindex-1 +} diff --git "a/Week_09/\350\275\254\346\215\242\346\210\220\345\260\217\345\206\231\345\255\227\346\257\215709.go" "b/Week_09/\350\275\254\346\215\242\346\210\220\345\260\217\345\206\231\345\255\227\346\257\215709.go" new file mode 100644 index 0000000..75d16c3 --- /dev/null +++ "b/Week_09/\350\275\254\346\215\242\346\210\220\345\260\217\345\206\231\345\255\227\346\257\215709.go" @@ -0,0 +1,24 @@ +/** + @author: dingfeng + @date: 2021/3/5 + @note: +**/ +package leetcode + +import "strings" + +func toLowerCase(str string) string { + return strings.ToLower(str) +} +func toLowerCase2(str string) string { + var b strings.Builder + b.Grow(len(str)) + for i := 0; i < len(str); i++ { + c := str[i] + if 'A' <= c && c <= 'Z' { + c += 'a' - 'A' + } + b.WriteByte(c) + } + return b.String() +} \ No newline at end of file diff --git "a/Week_10 \346\257\225\344\270\232\346\200\273\347\273\223/\346\225\260\346\215\256\347\273\223\346\236\204\345\222\214\347\256\227\346\263\225-\346\200\235\347\273\264\345\257\274\345\233\276.pdf" "b/Week_10 \346\257\225\344\270\232\346\200\273\347\273\223/\346\225\260\346\215\256\347\273\223\346\236\204\345\222\214\347\256\227\346\263\225-\346\200\235\347\273\264\345\257\274\345\233\276.pdf" new file mode 100644 index 0000000..c54b09d Binary files /dev/null and "b/Week_10 \346\257\225\344\270\232\346\200\273\347\273\223/\346\225\260\346\215\256\347\273\223\346\236\204\345\222\214\347\256\227\346\263\225-\346\200\235\347\273\264\345\257\274\345\233\276.pdf" differ diff --git "a/Week_10 \346\257\225\344\270\232\346\200\273\347\273\223/\347\256\227\346\263\225\350\256\255\347\273\203\350\220\245\346\257\225\344\270\232\346\200\273\347\273\223.docx" "b/Week_10 \346\257\225\344\270\232\346\200\273\347\273\223/\347\256\227\346\263\225\350\256\255\347\273\203\350\220\245\346\257\225\344\270\232\346\200\273\347\273\223.docx" new file mode 100644 index 0000000..88b8b32 Binary files /dev/null and "b/Week_10 \346\257\225\344\270\232\346\200\273\347\273\223/\347\256\227\346\263\225\350\256\255\347\273\203\350\220\245\346\257\225\344\270\232\346\200\273\347\273\223.docx" differ diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..d36a2c4 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module algorithm023 + +go 1.14 diff --git a/main.go b/main.go new file mode 100644 index 0000000..e66a1d2 --- /dev/null +++ b/main.go @@ -0,0 +1,62 @@ +/** + @author: dingfeng + @date: 2021/1/15 + @note: +**/ +package main + +import ( + "algorithm023/Week_03" + "fmt" +) + +func main(){ + //tn := Week_03.TreeNode{ + // Val: 1, + // Left: &Week_03.TreeNode{ + // Val: 2, + // Left: &Week_03.TreeNode{ + // Val: 4, + // Left: &Week_03.TreeNode{ + // Val: 8, + // }, + // Right: &Week_03.TreeNode{ + // Val: 9, + // }, + // }, + // Right: &Week_03.TreeNode{ + // Val: 5, + // Left: &Week_03.TreeNode{ + // Val: 10, + // }, + // Right: &Week_03.TreeNode{ + // Val: 11, + // }, + // }, + // }, + // Right: &Week_03.TreeNode{ + // Val: 3, + // Left: &Week_03.TreeNode{ + // Val: 6, + // Left: &Week_03.TreeNode{ + // Val: 12, + // }, + // Right: &Week_03.TreeNode{ + // Val: 13, + // }, + // }, + // Right: &Week_03.TreeNode{ + // Val: 7, + // Left: &Week_03.TreeNode{ + // Val: 14, + // }, + // Right: &Week_03.TreeNode{ + // Val: 15, + // }, + // }, + // }, + //} + //res:=Week_03.LowestCommonAncestor(&tn,&Week_03.TreeNode{Val: 9},&Week_03.TreeNode{Val: 11}) + res := Week_03.Combine(4,2) + fmt.Println(res) +} \ No newline at end of file