Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ARTS 第四周(2019.4.22~2019.4.27) #4

Open
catcuts opened this issue Apr 27, 2019 · 0 comments
Open

ARTS 第四周(2019.4.22~2019.4.27) #4

catcuts opened this issue Apr 27, 2019 · 0 comments
Labels

Comments

@catcuts
Copy link
Owner

catcuts commented Apr 27, 2019

ARTS 第四周(2019.4.22~2019.4.27)

Algorithm 存在重复

题目:

存在重复

代码:

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    let sorted = nums.sort((a, b) => a - b);
    let ref = sorted[0];
    for (let i = 1, len = nums.length; i < len; i++) {
        if (sorted[i] === ref) return true;
        ref = sorted[i];
    }
    return false;
};

思路:
先快排,后遍历。快排时间复杂度 O(log2n),遍历时间复杂度 O(n),
又因为需要复制一份避免改变原来的数组,所以总的时间复杂度为 O(log2n) + O(n),空间复杂度为 O(n)

对比:
与最高分对比:
本代码运行 18 个测试用例花费约 168ms,平均一个测试用例约 9ms
最高分代码运行 18 个测试用例花费约 120ms,平均一个测试用例约 7ms
注:两份代码都在本机上运行(不同机器性能不同)

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    var obj = {},
        len = nums.length;
    for(var i = 0;i < len;i++){
        if(!obj[nums[i]]){
            obj[nums[i]]=1;
        }else{
            return true;
        }
    }
    return false;
};

利用了 JavaScript 原生对象,它使用哈希值进行索引,时间复杂度为 O(1),
又因为需要一个对象来做缓存,所以整体时间复杂度为 O(n),空间复杂度为 O(n)

Tip

Tip#1 nodejs 适配不同系统获取 ip

indutny/node-ip
推荐来自:Get local IP address in node.js

Tip#2 linux 命令行复制本地文件/文件夹到远程主机

sshpass -p '密码' rsync -av -e ssh --exclude='要排除的文件或文件夹' 要复制的文件或文件夹(支持 glub 通配符) 用户名@地址:目标位置

Tip#3 nodejs 多网卡接收组播消息注意事项

在程序加入组播时, socket.addMembership 的第二个参数指定接收网卡,如:

socket.addMembership(组播地址, '192.168.116.32')

Review 应不应该直接运行 nodejs 程序在生产环境中

阅读:
You should never ever run directly against Node.js in production. Maybe.

点评:
本文首先阐述了直接运行 nodejs 程序的不便之处(如:不能监听文件变化自动重启,或者不能在程序运行出错退出后自动重启),
随后介绍了常见的 nodejs 程序管理工具(如 supervisornodemon),但文中说在轻型服务器上这两款服务不多见,
一切似乎只是为了引出一个很炫酷的 nodejs 程序管理工具 pm2

一次性理清 Web 攻击与防范

分享原创一篇:
一次性理清 Web 攻击与防范

@catcuts catcuts added the ARTS label Apr 27, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant