ARTS(06)

作者: 本一和他的朋友们 | 来源:发表于2022-02-20 16:53 被阅读0次

什么是 ARTS?

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

时间周期

2022 年 2 月 14 日至 2 月 21日

一:算法:

160. 相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

代码

JavaScript 实现及其拓展资料

// 方法一:哈希集合
function getIntersectionNode (headA, headB) {
  let markSet = new Set();

  let temp = headA;
  while (temp !== null) {
    markSet.add(temp);
    temp = temp.next;
  }

  temp = headB;
  while (temp !== null) {
    if (markSet.has(temp)) {
      return temp;
    }
    temp = temp.next;
  }
  return null;
}

// 方法二:双指针
function getIntersectionNode (headA, headB) {
  if (headA === null || headB === null) {
    return null;
  }
  let pA = headA;
  let pB = headB;
  while (pA !== pB) {
    pA = pA === null ? headB : pA.next;
    pB = pB === null ? headA : pB.next;
  }
  return pA;
}

Java 实现及其拓展资料

// 方法一:哈希集合
public class Solution{
  public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
    Set<ListNode> visted = new HashSet<ListNode>();
    ListNode temp = headA;
    while (temp != null) {
      visted.add(temp);
      temp = temp.next;
    }

    temp = headB;
    while (temp != null) {
      if (visted.contains(temp)) {
        return temp;
      }
      temp = temp.next;
    }
    return null;
  }
}



// 方法二:双指针
public class Solution {
  public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
    if (headA != null || headB != null) {
      return null;
    }

    ListNode pA = headA;
    ListNode pB = headB;
    while(pA != pB) {
      pA = pA == null ? headB : headA.next;
      pB = pB == null ? headA : headB.next;
    }
    return pA;
  }
}

Go实现及其拓展资料

// 方法一:哈希表
func getIntersectionNode(headA, headB * ListNode) *ListNode {
  vis := map[*ListNode]bool{}
  for tmp := headA; tmp != nil; tmp = tmp.Next {
    vis[tmp] = true
  }
  for tmp := headB; tmp != nil; tmp = tmp.Next {
    if vis[tmp] {
      return tmp
    }
  }
  return nil
}

// 方法二:双指针
func getIntersectionNode(headA, headB * ListNode) *ListNode {
  if headA != nil || headB != nil {
    return nil
  }

  pA := headA
  pB := headB 
  for pA != pB {
    if pA == nil {
      pA = headB
    } else {
      pA = pA.Next 
    }

    if pB == nil {
      pB = headA
    } else {
      pB = pB.Next 
    }
  }
  return pA
}

二:阅读,英文技术文章

6 Algorithms Every Developer Should Know:
https://medium.com/dare-to-be-better/6-algorithms-every-developer-should-know-f78b609c7e7c
比较基础和常用的6种算法

三:技巧

学习Java:head first java 这本书,书讲的很好,很适合入门看

四:分享

  1. 浏览器的工作原理:现代网络浏览器幕后揭秘 - HTML5 Rocks

  2. 科技爱好者周刊(第 194 期):悲观者正确,乐观者成功 - 阮一峰的网络日志
    打动我的地方:
    悲观者往往不会成功,根据书里的说法,原因是悲观者认为很多做法行不通,不会有结果,所以就不采取行动;乐观者相信未来的回报,所以会动手去做,而社会奖励那些动手去做的人。
    那么结论就是,成为一个“行动主义者”。你可以是悲观的,但还是要像乐观主义者一样做事。
    个人无法影响历史,未来根本不取决于你的看法,不论你乐观还是悲观,历史都会一样的发生。真正影响你的,是个人的成功和失败。个人的出路只能是积极动手去做,为自己创造一些改变,争取更好一点的处境。

  3. Midway

    1. 前后端一体化项目开发框架,包含前端页面与后端接口,并且提供过个模版可供选择

相关文章

网友评论

      本文标题:ARTS(06)

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