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-0 #2

Open
blackwuxin opened this issue Apr 13, 2019 · 0 comments
Open

ARTS-0 #2

blackwuxin opened this issue Apr 13, 2019 · 0 comments

Comments

@blackwuxin
Copy link
Owner

ARTS,即:每周完成一个ARTS:每周至少做一个 leetcode 的算法题、阅读并点评至少一篇英文技术文章、学习至少一个技术技巧、分享一篇有观点和思考的技术文章,至少坚持一年。(也就是 Algorithm、Review、Tip、Share 简称ARTS)。

Algorithm

本周算法题:1.两数字之和

问题描述:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

分析:

方法一:暴力遍历
遍历每个元素x,查找是否存在一个与target-x相等的目标元素。
时间复杂度:O(n^2)
空间复杂度:O(1)

方法二:两遍哈希表
使用哈希表,保持数组中每个元素与其对索引相对应。
先遍历一遍数组初始化哈希表。
再遍历一次数组判断哈希表中是否存在target-nums[i],注意该目标不能是nums[i]本身。

用空间换取时间。
时间复杂度:O(n)
空间复杂度:O(n)

方法三:一遍哈希表
事实上,我们可以一遍完成。在迭代并将元素插入表中的同时,检查当前表中元素是否已经存在存在当前元素所对应的元素。如果存在,则找到对应解。

时间复杂度:O(n)
空间复杂度:O(n)

代码:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let map = new Map();
    for(let i = 0; i < nums.length; i++){
        let complement = target - nums[i];     
        if(map.has(complement)){
            return [map.get(complement),i];
        }
        map.set(nums[i],i);
    }
    return [];
};

// 测试用例
输入 
[2,7,11,15]
9
输出 
[0,1]
预期
[0,1]

Review

https://facebook.github.io/react-native/blog/2019/03/12/releasing-react-native-059

本文是React Native 0.59发布日志。介绍了0.59的一些新的功能改进。其中几个新的特性。

  • Hooks
  • Android JSC的升级
  • 模块的动态加载
  • 核心的库的精进
  • CLI工具提升
  • 不兼容性改动点

最近公司React Native框架在进行大版本的升级,从去年的0.51升级到0.59。看了官方这几个版本的改进,总体觉得现在Facebook对开源投入的精力越来越过,对整体的性能方面提升比较关注。这次提供metro.config.js配置inline require,可以有效的提高业务模块首屏的加载速度,虽然出来的有些晚。期待后面的farbric版。

Tip

React Native中模块的导出优化。

在React Native中使用import A from 'A'进行模块导入的时候,实际编译后执行的是require('A')会立即执行A模块中代码。

如果我们有一个公共模块提供给外部访问,如下:

// common.js
import A from './A';
import B from './B';
import C from './C';
export {
  A,
  B,
  C
}

// main.js
import { A } from './common';

此时,虽然我们在main.js中只引入了A模块,但实际B,C模块代码也被执行了。

我们可以使用Getter属性优化导出方式。具体代码如下:

// common.js

module.exports = {
    get A(){
        return require('./A');
    }
    get B(){
        return require('./B');
    }    
    get C(){
        return require('./C');
    }
}

// main.js
import { A } from './common';

这种在main.js中需要等到我们使用A模块的是才会真正执行require('./A'),并且不会加载B、C模块。从而达到的模块的按需加载和动态加载效果。

Share

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

最近在学习极客时间的《现场面试》专栏。里面有一篇提到如何面试程序员?

关键看三点:

  • 编程能力,能不能实际动手写程序,有没有基本的编程思维。
  • 技术技能经验,参与过那些实际项目,积累了哪些实际的技能经验。
  • 软性能力,沟通合作能力如何,心理成熟度如何,管理和领导力如何。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant