ARTS-19

作者: 本一和他的朋友们 | 来源:发表于2022-11-05 15:25 被阅读0次

    什么是 ARTS?

    1. 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习
    2. 阅读(Review): 阅读并点评至少一篇英文技术文章,提高英文水平
    3. 技巧 (Tip):学习至少一个技术技巧,总结、归纳日常工作中遇到的知识点
    4. 分享(Share):分析一篇有观点和思考的技术文章,建立影响力,输出价值观

    时间周期
    10月31日至11月6日

    一:算法

    将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
    示例:
    输入:1->2->4, 1->3->4
    输出:1->1->2->3->4->4
    

    前置知识:

    1. 递归
    2. 链表

    思路:
    使用递归来解,将两个链表头部较小的一个与剩下的元素合并,并返回拍好序的链表头,当两条链表中的一条为空时终止递归。

    JavaScript

    /**
     * Definition for singly-linked list.
     * function ListNode(val) {
     *     this.val = val;
     *     this.next = null;
     * }
     */
    /**
     * @param {ListNode} l1
     * @param {ListNode} l2
     * @return {ListNode}
     */
    function mergeTwoLists (l1, l2) {
      if (l1 === null) {
        return l2;
      } else if (l2 === null) {
        return l1;
      }
    
      if (l1.val < l2.val) {
        l1.next = mergeTwoLists(l1.next, l2)
        return l1;
      } else {
        l2.next = mergeTwoLists(l1, l2.next)
        return l2
      }
    }
    

    Java

    class Solution {
      public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 ==null) {
          return l2;
        } else if (l2 == null) {
          return l1;
        } else if (l1.val < l2.val) {
          l1.next = mergeTwoLists(l1.next, l2);
          return l1;
        } else {
          l2.next = mergeTwoLists(l1, l2.next);
          return l2;
        }
      }
    }
    

    Python

    class Solution:
      def mergeTwoLists(self, l1:ListNode, l2:ListNode) -> ListNode:
        if not l1: return l2
        if not l2: return l1
        if l1.val <= l2.val:
          l1.next = self.mergeTwoLists(l1.next, l2)
          return l1
        else:
          l2.next = self.mergeTwoLists(l1, l2.next)
          return l2
    

    第二种思路:迭代
    JavaScript

    const mergeTwoLists = function (l1, l2) {
      const prehead = new ListNode(-1)
      let prev = prehead
    
      while (l1 != null && l2 != null) {
        if (l1.val <= l2.val) {
          prev.next = l1
          l1 = l1.next
        } else {
          prev.next = l2
          l2 = l2.next
        }
        prev = prev.next
      }
      prev.next = l1 === null ? l2 : l1;
      return prehead.next;
    }
    

    Java

    class Solution {
      public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode prehead = new ListNode(-1);
        ListNode prev = prehead;
        while(l1 != null && l2 != null) {
          if (l1.val <= l2.val) {
            prev.next =l1;
            l1 = l1.next;
          } else {
            prev.next = l2;
            l2 = l2.next;
          }
          prev = prev.next;
        }
        // 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
        prev.next = l1 == null ? l2 : l1;
        return prehead.next;
      }
    }
    

    Python

    class Solution:
        def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
            prehead = ListNode(-1)
    
            prev = prehead
            while l1 and l2:
                if l1.val <= l2.val:
                    prev.next = l1
                    l1 = l1.next
                else:
                    prev.next = l2
                    l2 = l2.next            
                prev = prev.next
    
            # 合并后 l1 和 l2 最多只有一个还未被合并完,我们直接将链表末尾指向未合并完的链表即可
            prev.next = l1 if l1 is not None else l2
    
            return prehead.next
    
    

    二:阅读

    Why Software Engineers like Woodworking

    三:技巧

    第24期 | 找到你的财富成长曲线-极客时间
    分享理由:

    1. 财富自由是妄想,但是找到财富增长的具体方法,有且可以执行。
    2. 这几条建议搭配arts,极好
    3. 第一份工作不要过于关注工资。几乎没人会用第一份工作的薪资买房买车发家致富,长期来看,这个阶段工资多一点少一点几乎不会对你漫长的人生有任何影响,而选择一个好的公司、环境、方向和团队,对你的影响则是长期而深远的

    四:分享

    世界最深极深地下实验室:从地下2400米奔赴前沿科技星辰大海新浪四川新浪网

    相关文章

      网友评论

          本文标题:ARTS-19

          本文链接:https://www.haomeiwen.com/subject/pcvptdtx.html