ARTS 第17周

ARTS 第17周分享

[TOC]

Algorithm

2. Add Two Numbers

  • 将链表的各位按相加即可

[参考代码]

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
    tmp1 := l1
    tmp2 := l2
    num := 0

    //var ResLi *ListNode
    ResLi := &ListNode{}
    resLi := ResLi
    preLi := resLi
    // 当两元素相加小于10,直接插入; 大于等于10,插入余数,下一位加1
    for tmp1 != nil  {
        // 取值相加
        if tmp2 != nil {
            num = tmp1.Val + tmp2.Val
        } else {
            num = tmp1.Val
        }
        // 值存入新list
        resLi.Val += num
        // 判断是否大于10
        if resLi.Val >= 10 {
            outNum := resLi.Val/10
            resLi.Val = resLi.Val%10
            resLi.Next = &ListNode{Val:outNum}
        } else {
            resLi.Next = &ListNode{}
        }

        tmp1 = tmp1.Next
        preLi = resLi
        resLi = resLi.Next

        if tmp2 != nil {
            tmp2 = tmp2.Next
        }
    }

    for tmp2 != nil {
        num = tmp2.Val
        // 值存入新list
        resLi.Val += num
        // 判断是否大于10
        if resLi.Val >= 10 {
            outNum := resLi.Val/10
            resLi.Val = resLi.Val%10
            resLi.Next = &ListNode{Val:outNum}
        } else {
            resLi.Next = &ListNode{}
        }

        tmp2 = tmp2.Next
        preLi = resLi
        resLi = resLi.Next
    }

    if resLi.Val == 0 {
        preLi.Next = nil
    }
    return ResLi 
}

3. Longest Substring Without Repeating Characters

func lengthOfLongestSubstring(s string) int {
    max := 0
    front := -1
    rear := -1
    strMap := make(map[string]int)
    for i, v := range s {
        // 从map中提取
        if ins, ok := strMap[string(v)]; ok {
            if ins > front {
                front = ins
            }
        }
        strMap[string(v)] = i
        rear = i

        if tmpMax := rear - front; tmpMax > max {
            max = tmpMax
        }
    }
    return max
}

Review

Learning to Use Go Reflection — Part 2:https://medium.com/capital-one-tech/learning-to-use-go-reflection-part-2-c91657395066

  • The biggest hint is checking the types of the parameters.
  • You are calling a library that’s populating a struct instance, using reflection to both analyze struct tags and set values on a struct’s fields.
  • If the same input values are passed in a second time, the return values are pulled from the cache rather than recomputed.
  • We’re going to use a map to associate our input values with our output values and one of the rule in Go is that the keys for a map must be comparable.

Tips

git删除远程分支

Git v1.7.0 之前

  • git push origin :

    推送一个空分支到远程分支,其实就相当于删除远程分支;

    也可用类似方法删除一个远程tag:

    git push origin :refs/tags/

Git v1.7.0 之后

  • git push origin --delete tag
git合并另一分支中的单个提交
  • git cherry-pick 命令用来获得在单个提交中引入的变更,然后尝试将作为一个新的提交引入到你当前分支上。
  • git revert 命令本质上就是一个逆向的 git cherry-pick 操作。 它将提交中的变更的以完全相反的方式的应用到一个新创建的提交中,本质上就是撤销或者倒转。
命令行通配符:http://www.ruanyifeng.com/blog/2018/09/bash-wildcards.html
  1. ?字符代表单个字符
  2. *代表任意数量的字符。
  3. [...]匹配方括号之中的任意一个字符
  4. [^...]和[!...]表示匹配不在方括号里面的字符(不包括空字符)。
  5. {...} 表示匹配大括号里面的所有模式,模式之间使用逗号分隔。
  6. {...}与[...]有一个很重要的区别。如果匹配的文件不存在,[...]会失去模式的功能,变成一个单纯的字符串,而{...}依然可以展开。
  7. {start..end}会匹配连续范围的字符。
  • 通配符是先解释,再执行。
    • Bash 接收到命令以后,发现里面有通配符,会进行通配符扩展,然后再执行命令。
  • 通配符不匹配,会原样输出。
    • Bash 扩展通配符的时候,发现不存在匹配的文件,会将通配符原样输出。
  • 只适用于单层路径。
    • 上面所有通配符只匹配单层路径,不能跨目录匹配,即无法匹配子目录里面的文件。或者说,?或*这样的通配符,不能匹配路径分隔符(/)。

share

解决算法题的思路:

​ 先简单---> 再复杂;<把一个复杂的算法,拆分成多个简单的问题,然后在逐个解决>

大O到底的由来

心里对算法中渐进时间复杂度为什么用大O符号表示有疑问,最近认真查了下维基,小本本记下来:

  • 大O符号(英语:Big O notation),又称为渐进符号,是用于描述函数渐近行为的数学符号。
  • 它是用另一个(通常更简单的)函数来描述一个函数数量级的渐近上界。
  • 大O符号是由德国数论学家保罗·巴赫曼在其1892年的著作《解析数论》(Analytische Zahlentheorie)首先引入的。
  • 这个记号则是在另一位德国数论学家艾德蒙·朗道的著作中才推广的,因此它有时又称为朗道符号(Landau symbols)。
  • 代表“order of ...”(……阶)的大O,最初是一个大写希腊字母“Ο”(omicron),现今用的是大写拉丁字母“O”。

这周看了几句话,让我开始更加关注自己所在的环境:

多数人都是群体效应的产物。承认吧,环境就是一个大染缸,无论你本色啥样,最终难以摆脱统一的色调。

其实我们的一生就是在为改变自己所处的环境奔波:

  • 挣钱买房,改变自己的生活环境;
  • 找更好的工作,改变自己的工作环境

本周阅读

第四周:1, 5, 6, 
git中利用rebase来压缩多次提交: https://blog.csdn.net/itfootball/article/details/44154121
(Git)合并多个commit: https://segmentfault.com/a/1190000007748862
优秀程序员的经验:https://mp.weixin.qq.com/s/aHE0UPjtUqOiykbNU7ug_g

Go语言能做什么: https://juejin.im/post/5ca5c1abe51d4524613ec1b3
Git远程操作详解: http://www.ruanyifeng.com/blog/2014/06/git_remote.html
命令行通配符教程: http://www.ruanyifeng.com/blog/2018/09/bash-wildcards.html
深度解密Go语言之channel: https://mp.weixin.qq.com/s/90Evbi5F5sA1IM5Ya5Tp8w

10张 GIF 动图让你弄懂递归等概念: https://mp.weixin.qq.com/s/_8Qy1NQ3fZSzg3tlbInbYg

你可能感兴趣的:(ARTS 第17周)