算法整理

171 阅读1分钟

1.写一个 mySetInterVal(fn, a, b),每次间隔 a,a+b,a+2b 的时间,然后写一个 myClear,停止上面的 mySetInterVal

function mySetInterval(fn, a, b) {    let timer = {      id: null    };    console.log('timer****', timer)    function run(fn, a, b) {      console.log('timer88888', timer)      timer.id = setTimeout(() => {        fn();        console.log('间隔了' + a + 'ms');        run(fn, a + b, b)      }, a);    }    run(fn, a, b);    return timer;  }  function myClear(timeId) {    clearTimeout(timeId);  }  let timer = mySetInterval(() => {    console.log('执行啦fn函数')  }, 200, 300)  console.log('timer', timer);  setTimeout(() => {    myClear(timer.id);  }, 2000);

十大经典排序算法(动图演示)

文章来自www.cnblogs.com/onepixel/ar…

2.合并二维有序数组成一维有序数组,归并排序的思路

let arr1 = [    [1, 2, 3],    [4, 5, 6],    [7, 8, 9],    [1, 2, 3],    [4, 5, 6]  ];  let arr2 = [    [1, 4, 6],    [7, 8, 10],    [2, 6, 9],    [3, 7, 13],    [1, 5, 12]  ];  function merge(left, right) {    console.log('left', left);    console.log('right', right);    let result = [];    while (left.length > 0 && right.length > 0) {      if (left[0] < right[0]) {        result.push(left.shift());      } else {        result.push(right.shift());      }    }    while (left.length > 0) {      result.push(left.shift());    }    while (right.length > 0) {      result.push(right.shift());    }    console.log('result', result);    return result;  }  function mergeSort(arr) {    console.log('arr', arr);    if (arr.length < 2) {      return arr;    }    while (arr.length > 1) {      console.log('arr.length', arr.length);      let arrayItem1 = arr.shift();      console.log('arr**********', arr);      let arrayItem2 = arr.shift();      console.log('arrayItem1', arrayItem1);      console.log('arrayItem2', arrayItem2)      let mergeArr = merge(arrayItem1, arrayItem2);      arr.push(mergeArr);    }    return arr[0]  }  console.log(mergeSort(arr1))

3.斐波那契数列

function fibonacci(n) {    if (n == 1 || n == 2) {      return 1    };    return fibonacci(n - 2) + fibonacci(n - 1);  }  console.log(fibonacci(3));

4.字符串出现的不重复最长长度

let str = 'abacsjdj';  function checkSting(str) {    let arr = str.split('');    console.log(arr)    let maxArr = [];    let tempArr = [];    for (let i = 0; i < arr.length; i++) {      if (tempArr.indexOf(arr[i]) > -1) {        let sliceNum = Number(tempArr.indexOf(arr[i])) + 1;        tempArr = tempArr.slice(sliceNum);        tempArr.push(arr[i]);        if (tempArr.length > maxArr.length) {          maxArr = tempArr;        }      } else {        tempArr.push(arr[i]);        if (tempArr.length > maxArr.length) {          maxArr = tempArr;        }      }    }    console.log('maxArr', maxArr);    return maxArr;  }  checkSting(str);