每周 ARTS 第 6 期

1. Algorithm

160. 相交链表(简单)

描述:

编写一个程序,找到两个单链表相交的起始节点。

示例:
1
2
输入: 9->1->2->4, 3->2->4
输出: 2
思路:

定义两个指针, 第一轮让到达末尾的节点指向另一个链表的头部, 最后如果两个指针相遇则为交点。两个指针移动了相同的距离, 有交点就结束, 无交点就各走了两条指针的长度。

解法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if (headA == null || headB == null) {
return null;
}

ListNode pointA = headA;
ListNode pointB = headB;
while (pointA != pointB) {
pointA = pointA == null ? headB : pointA.next;
pointB = pointB == null ? headA : pointB.next;
if (pointA != null && pointB != null && pointA.val == pointB.val) {
break;
}
}
return pointA;
}
}
分析:
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

169. 求众数(简单)

描述:

给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 n/2 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。

示例:
1
2
输入: [2,2,1,1,1,2,2]
输出: 2
思路:

从第一个数开始 count=1,遇到相同的就加 1,遇到不同的就减 1。如果减到 0,就换个数开始计数,总能找到最多的那个。

解法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public int majorityElement(int[] nums) {
if (nums == null) {
return 0;
}

int count = 1;
int major = nums[0];
for (int i = 1; i < nums.length; i++) {
if (major == nums[i]) {
count++;
} else {
if (--count == 0) {
major = nums[i + 1];
}
}
}
return major;
}
}
分析:
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

2. Review

A Software Engineering survival guide 软件工程师生存指南

作者总结了软件工程师职业生涯前几年的经验:

  • 怎样充分准备面试
  • 工作中如何成长
  • 持续进步需要什么资源

准备面试的几条意见:

  • 简历上列举的编程语言,至少能够完成 FizzBuzz 测试。
  • 基本的数据结构和算法,像链表、数组、树和排序。
  • 你选择的语言的特点,比如字符串为什么不可变,内存是如何管理的。
  • 面向对象编程的概念,比如类、对象和继承。
  • 学会总结你的经验,在简历上记叙下来。
  • 在 GitHub 上展示代码,或者参与开源项目。
  • 面试是双向的过程,也要面试你的面试官,比如提问几个问题:
    • 你们是如何进行软件测试的
    • 你们用什么版本控制系统
    • 你们是如何处理技术债的

工作中的几条建议:

  • 优秀的工业级代码是可读的、具有防御性的、经过优化的。
  • 大多数时间不是用来写新代码,而是 debug、读代码。
  • debug 和读代码,熟悉基础代码和产品。
  • 组织你的想法,比如使用 TODO 列表、笔记、图表。
  • 好的库具备的特征:开源、宽松的许可(MIT、BSD等)、成熟、一直维护、其他公司或项目在用。

持续提升的几条建议:在线课程、在线硕士学位、博客、大会。

3. Tip

最近在读《软技能:代码之外的生存指南》,看到营销的章节。对于有才华的人来说,营销就是一个「乘数效应」。你的营销越好,你的才华才能表现得淋漓尽致。自我营销的正确的方式是为别人提供价值,塑造好自己的形象,打造引人注目的品牌。对于软件开发人员,推荐的是博客。

4. Share

Git Commit 日志风格指南

这是 LeanCloud 技术团队的文章,主要讲了几点 Git 提交日志的规范。

本文标题:每周 ARTS 第 6 期

文章作者:落英坠露

发布时间:2019年05月12日 - 11:05

最后更新:2019年05月12日 - 11:05

原始链接:https://isuperqiang.cn/2019/05/12/每周-ARTS-第-6-期/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

赞赏是一种行为艺术