ARTS 打卡计划 _ 第二周

发布于: 2020 年 06 月 13 日

Algorithm(LeetCode算法题练习和学习)

经典的三数之和问题,要巧用双指针来优化时间复杂度。

class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> list = new ArrayList<>();
int len = nums.length;
if (len < 3) {
return list;
}
Arrays.sort(nums);
for (int x = 0; x < len; x++) {
if (nums[x] > 0) {
return list;
}
if (x > 0 && nums[x] == nums[x-1]) {
continue;
}
int i = x + 1;
int j = len - 1;
while (i < j) {
int sum = nums[x] + nums[i] + nums[j];
if (sum == 0) {
list.add(Arrays.asList(nums[x], nums[i], nums[j]));
while (i < j && nums[i] == nums[i+1]) {
i++;
}
while (i < j && nums[j] == nums[j-1]) {
j--;
}
i++;
j--;
} else if (sum > 0) {
j--;
} else if (sum < 0) {
i++;
}
}
}
return list;
}
}



Review(英文技术文章点评)

https://codegym.cc/groups/posts/172-8-common-mistakes-made-by-rookie-programmers

本文介绍了Java新手容易出现的错误。在平时的代码编写时,我也会出现相应的问题,通过这篇文章可以帮助我不再出现类似的问题。



Tip(总结和归纳本周学习的知识点)

面向对象编程的核心特点:抽象、继承、多态、封装。程序不是堆砌起来的,而是一点点成长起来的。一个程序可以被拆分成几个不同的部分,通常是层级。各部分/层级与其内部结构的逻辑关系紧密,而与其他层级/部分的关系则比较微弱。层级间的交互通常高度区分。一个层级可以利用其类的子集合来调用另一个层级。



Share(分享一篇有价值的文章)

https://time.geekbang.org/column/article/210337

本文来自极客时间专栏《Java业务开发常见错误100例》,针对线程池话题展开讨论,通过三个生产事故,提醒我们在使用线程池时应该注意些什么。



用户头像

还未添加个人签名 2018.11.14 加入

还未添加个人简介

评论

发布
暂无评论
ARTS打卡计划_第二周