LC_training(3)

  1. quickSort 会写递归版本, partition不开新空间. nlogn, logn(只考虑算法运行空间,但是n个元素必然需要n的空间)

  2. mergeSort 会写递归版本, merge需要新空间, nlogn, n+logn;

  3. mergeSort 会写迭代版本, merge需要新空间, nlogn, n;

阅读更多

JS深拷贝

ES6扩展运算符实现数组的深拷贝

用下面的方法实现数组的深拷贝是最简单的。

1
2
3
4
5
var arr = [1,2,3,4,5]
var [ ...arr2 ] = arr
arr[2] = 5
console.log(arr)
console.log(arr2)

太妙了!

阅读更多

This, Call, Aplly, Bind.

在JavaScript中,callapplybindFunction对象自带的三个方法,这三个方法的主要作用是改变函数中的this指向。

bind 是返回对应函数,便于稍后调用;applycall 则是立即调用 。

阅读更多

Tree BFS DFS

使用callback以及call技术, 写出标准化的BFS,DFS. 以及扩展性极强的contain.

阅读更多

LC_training(2)

易错点

  1. forEach()函数体中,无法使用return终止运行,也不能使用break,continue. 应该使用其他语法.

阅读更多

LC_training(1)

犯过的那些错误

  1. 一个专属JS的不起眼的坑!!!

    1
    2
    3
    4
    for(var i in nums){
    if(nums[i]==nums[i+1]){
    ...
    }

    上述代码中nums[i+1]结果undifined, 因为for in遍历的原理是什么呢? 其实是把nums数组当做Obejct(一个键值对结构), 其中i 是对于其key的遍历, 因此i 其实是字符串”0”, 而i+1则表示”01”, 自然是找不到结果.

阅读更多