ARTS-Week01

125 阅读2分钟

Algorithm

LeetCode-448.Find All Numbers Disappeared in an Array

问题:给定一个长度为n的数组,里面只有1-n中的数,并且相同的数可能会重复出现,但是不会出现超过两次。在O(n)的时间复杂度和无额外空间复杂度的前提下,找出数组中没有的1-n的数。

leetcode.com/problems/fi…

解答

用数组下标标记未出现的数,如出现4就把a[3]的数变成负数,当查找时判断a的正负就能获取下标。具体做法如下:

  1. 遍历整个数组,找到数组中的值a作为索引对应的值b,然后把b置位负的。
  2. 再一次遍历数组,把所有非负的数找到,这些数的下标就是缺失的。
 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,所以大致看下参考下就好 :

  1. 评论写这样写代码的原因,不要评论写的是什么
  2. 单元测试胜于写文档
  3. 减少重新赋值
  4. 总是使用接口
  5. 打断switch-case语句
  6. 如果含义不明显,对参数命名(举了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里加个白名单的操作。这篇文章从前端的角度上介绍了什么是跨域,怎么解决跨域,读过文章后,确实加深了些对跨域的理解。