ARTS第十一周

受辞职考研和新冠肺炎疫情影响,一直没更。遗憾,数学和专业课再高点就有戏了。继续。

1.Algorithm:每周至少做一个 leetcode 的算法题
2.Review:阅读并点评至少一篇英文技术文章
3.Tip:学习至少一个技术技巧
4.Share:分享一篇有观点和思考的技术文章

 

以下是各项的情况:

Algorithm

回顾第一周题目

链接:[LeetCode-01]-Two Sum

之前使用的暴力法,思路就是去找 taget - nums[i] 然后返回

class Solution {
    public int[] twoSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[j] == target - nums[i]) {
                    return new int[] { i, j };
                }
            }
        }
        throw new IllegalArgumentException("No two sum solution");
    }
}

现在考研后,应该考虑去分析时间和空间复杂度

  • 时间复杂度:

对于每个元素,通过遍历数组的其余部分来寻找它所对应的目标元素,每次将耗费 O(n)的时间。因为嵌套,故时间复杂度为 O(n^2)

  • 空间复杂度:O(1)。

不使用暴力法,那么用什么呢?

  需要一种更有效的方法来检查数组中是否存在目标元素,哈希表(保持数组中的每个元素与其索引相互对应)。

可以将查找时间从O(n)降低到 O(1)。

  具体:使用了两次循环。在第一次循环中,将每个元素的值和它的索引添加到表。之后在第二次循环中,将检查每个元素所对应的目标元素(target - nums[i]target−nums[i])是否存在于表中,代码如下:

 

 Java:

复制代码
public int[] twoSum(int[] nums, int target) {
    Map<Integer,Integer> map = new HashMap<>();
    for(int i=0 ; i < nums.length ; i++){
        map.put(nums[i],i);
    }
    for (int i = 0;i < nums.length; i++){
        int complement = target - nums[i];
    if (map.containsKey(complement)) {
        return new int [] { i , map.get(complement)};
        }
    }
    throw new IllegalArgumentException("No two sum solution");
}                
复制代码

 

  JS:

复制代码
const twoSum = function(nums, target) {
    const comp = {};
    for(let i=0; i<nums.length; i++){
        if(comp[nums[i] ]>=0){
            return [ comp[nums[i] ] , i]
        }
        comp[target-nums[i]] = i
    }
};
复制代码

分析时间和空间复杂度

  • 时间复杂度:

  因为第一次需要遍历全部放入表中,故第一次时间复杂度 O(n)。而对于每个元素,通过遍历数组的其余部分来寻找它所对应的目标元素,每次将耗费 O(1)的时间。故总时间复杂度为 O(n)

  • 空间复杂度:O(1)。

所以,总体分析后,理解了为什么哈希表会节省本机资源。这也是数据库,组件solr喜欢用哈希表的一个重要原因。

 

Review

分享  Josh Hug 的 CS61B课程

最近在看josh的数据结构,理清思路非常有帮助。比起以前听的课,很有脉络,自成体系 。大概理了下他的思路,后面直接在YouTube上去搜索Josh Hug。基本是按这个流程走的

 

Tip

  简单JMS(Just My Socks )使用指南  

什么是 obfs (simple-obfs)?

obfs (simple-obfs) 是一个设计用于混淆 Ssocks 流量的工具,其原理是在 Ss 流量前面添加一层加密,以伪装成是在正常的访问网站,obfs 的实现有两种方式,一种 HTTP,另外一种是 TLS。

而 Just My Socks 支持的是 TLS 方式,此伪装性更加隐蔽,所以安全性更高。

由于 obfs 混淆相关并没有一致的 QR 链接等协商方式,所以你得自己必须得手动来配置选项,是不能直接快速扫描二维码或者添加链接方式导入来使用的。

 

 总结一下,就是封锁严重,为了更加安全隐蔽,Just My Socks 启用了 obfs 混淆,现在三、四组服务器需要安装插件才能正常连接。

 

目前 不建站的情况下,用别人的机场会方便点,所以选用JMS 。 1 , 2 , 5 组直接用QR去扫码或者复制链接进V2或者小飞机 都比较方便 。 主要记载遇到的坑 ,之前参考的博客 

https://cokebar.info/archives/1988

但不能ping通。

记录下我的解决方法 : 

一、直接通过官方提供的下载地址下载安装

 

二、安装插件和填写参数

下载解压到小飞机目录

在服务器配置界面,选择支持 obfs 混淆的节点,填入参数即可

 

插件:obfs-local     插件选项:obfs=tls    (复制)

 

Share

  这周热点是瑞幸咖啡,推荐个观点

  https://www.fool.com/investing/2020/02/04/why-luckin-coffee-stock-popped-today.aspx   谈到中国概念股票,投资者常常担心欺诈性数字。但是以后,这种情况会变得更糟。Luckin Coffee管理层发现了问题,并暂停了包括Liu在内的涉案人员,并对其结果进行了独立验证。也就是说,要确定该丑闻的严重程度还需要花费一些时间,甚至需要更长的时间才能恢复破碎的投资者信心。  对国内来说,并不算个好事。以后,中概股会更难。

 

posted @ 2020-04-05 22:46  五行属鱼  阅读(403)  评论(0编辑  收藏  举报