Algorithm
LeetCode-448.Find All Numbers Disappeared in an Array
问题:给定一个长度为n的数组,里面只有1-n中的数,并且相同的数可能会重复出现,但是不会出现超过两次。在O(n)的时间复杂度和无额外空间复杂度的前提下,找出数组中没有的1-n的数。
解答:
用数组下标标记未出现的数,如出现4就把a[3]的数变成负数,当查找时判断a的正负就能获取下标。具体做法如下:
- 遍历整个数组,找到数组中的值a作为索引对应的值b,然后把b置位负的。
- 再一次遍历数组,把所有非负的数找到,这些数的下标就是缺失的。
class Solution {
public List<Integer> findDisappearedNumbers(int[] nums) {
List<Integer> result = new ArrayList<>();
for (int i = 0; i < nums.length; i++) {
int v = Math.abs(nums[i]);
if (nums[v - 1] > 0) {
nums[v - 1] = -Math.abs(nums[v - 1]);
}
}
for (int i = 0; i < nums.length; i++) {
if (nums[i] > 0) {
result.add(i + 1);
}
}
return result;
}
}
Review
How to Write Readable Code
[medium.com/dealeron-de…](How to Write Readable Code)
主要提出了以下几点实践建议,不过作者也说了These tips, are more guidelines than rules,所以大致看下参考下就好 :
- 评论写这样写代码的原因,不要评论写的是什么
- 单元测试胜于写文档
- 减少重新赋值
- 总是使用接口
- 打断switch-case语句
- 如果含义不明显,对参数命名(举了C#的例子,不过貌似在idea里直接会显示)
Tip
IntellIJ IDEA中按照模板找内容
这个是我新学会的一个功能,可以根据模板来找到与模板匹配的代码块。 比如说: 想在整个工程里面找到所有的trycatch语句,但是catch语句里面没有做异常处理的。 catch语句里没有处理异常,是极其危险的。我们可以在IDEA里面方便找到所有这样的代码。
首先使用ctrl+shift+A快捷键弹出action框,然后输入Search Structurally后,选择Search Structurally,回车,跳转到Search Template。

点击Existing Templates按钮,输入try搜索,选择 try's。点击edit variables。

修改Catch Statment的出现的个数,0,0。点击ok。

点击find按钮,就可以找出try-catch语句,catch里面没有处理的的代码了。

Share
那些年曾谈起的跨域
segmentfault.com/a/119000001…
作为一个后端开发,工作中经常会遇到跨域问题,不过基本上也就是CORS interceptor里加个白名单的操作。这篇文章从前端的角度上介绍了什么是跨域,怎么解决跨域,读过文章后,确实加深了些对跨域的理解。