Aimee

personal blog

欢迎来到我的个人站~


算法相关

  • 1.写一个 mySetInterVal(fn, a, b),每次间隔 a,a+b,a+2b 的时间, 然后写一个 myClear,停止上面的 mySetInterVal
function mySetInterVal(fn, a, b) {
    this.time = 0;
    let timer;
    this.start = () => {
        timer = setInterval(() => {
            fn();
            this.time ++;
            console.log('a+ this.time * b', a+ this.time * b);
        }, a+ this.time * b)
    };
    this.clear = () => {
        this.time = 0;
        clearInterval(timer);
    };
}

const timer = new mySetInterVal(()=> console.log(1111), 1000, 1000);
timer.start();
setTimeout(() => {
    timer.clear(); 
}, 4000);
  • 合并二维有序数组成一维有序数组,归并排序的思路 ``` function mergeArr(arr) { if(arr.length < 1) { return []; } let mergedArr = arr[0]; const merge = function(arrA, arrB) { const res = []; while(arrA.length && arrB.length) { if(arrA[0] < arrB[0]) { res.push(arrA.shift()); } else { res.push(arrB.shift()); } } return res.concat(arrA).concat(arrB); };

    for(let i = 1;i<arr.length;i++) { mergedArr = merge(mergedArr, arr[i]); }

    return mergedArr; }

const test = mergeArr([[1,2,6,7], [3,4,8,9], [2,4,10,14]]); console.log(‘test’, test);


- 斐波那契数列
- F(0) = 0;
- F(1) = 1;
- F(n) = F(n - 1) + F(n - 2);
  - 递归版本

function fib(n) { if(n < 0) { throw Error(n不能小于0); } if(n <= 1) { return n; }

return fib(n-1) + fib(n-2); } ```  - 数组实现  ```  function fib1 (n) {
if(n < 0) {
    throw Error('n不能小于0');
}

if(n < 2) {
    return n;
}
let f0 = 0;
let f1 = 1;
for(let i = 1; i < n; i++) {
    [f0, f1] = [f1, f0+f1];
}
return f1; }

console.log(‘fib’, fib1(8), fib(8));


 - 字符串出现的不重复最长长度
 - 利用滑动窗口思想,有重复的字符,更新左边边界值

function lengthOflongest(str) { if(str.length <=0) { return 0; } let j = -1; let res = 0; let map = new Map(); for(let i =0;i<str.length;i++) { if(map.has(str[i])) { j = Math.max(j, map.get(str[i])); } res = Math.max(res, i - j); map.set(str[i], i); } return res; }

console.log(‘lengthOfLongestSubstring’, lengthOflongest(‘abcdaefa’)); ```