什么是 ARTS?
- 算法(Algorithm): 每周至少一道 LeetCode 算法题,加强编程训练和算法学习
- 阅读(Review): 阅读并点评至少一篇英文技术文章,提高英文水平
- 技巧 (Tip):学习至少一个技术技巧,总结、归纳日常工作中遇到的知识点
- 分享(Share):分析一篇有观点和思考的技术文章,建立影响力,输出价值观
时间周期
2022 年 2 月 14 日至 2 月 21日
一:算法:
给你两个单链表的头节点 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 这本书,书讲的很好,很适合入门看
四:分享
-
科技爱好者周刊(第 194 期):悲观者正确,乐观者成功 - 阮一峰的网络日志
打动我的地方:
悲观者往往不会成功,根据书里的说法,原因是悲观者认为很多做法行不通,不会有结果,所以就不采取行动;乐观者相信未来的回报,所以会动手去做,而社会奖励那些动手去做的人。
那么结论就是,成为一个“行动主义者”。你可以是悲观的,但还是要像乐观主义者一样做事。
个人无法影响历史,未来根本不取决于你的看法,不论你乐观还是悲观,历史都会一样的发生。真正影响你的,是个人的成功和失败。个人的出路只能是积极动手去做,为自己创造一些改变,争取更好一点的处境。 -
- 前后端一体化项目开发框架,包含前端页面与后端接口,并且提供过个模版可供选择
网友评论