interview-questions-in-javascript

数组

  • 在给定的无序的整形数组中,找到数字组中任意三个元素乘积的最大值,例如 var arr = [-10, 7, 29, 30, 5, -10, -70]

    解决问题的思路是将元素从小到大排序,那么最大乘积有可能是两个最小的负数乘一个最大的正数或是三个最大的正数相乘。

    1
    2
    3
    4
    5
    6
    7
    var arr = [-10, 7, 29, 30, 5, -10, -70];
    var sortArr = arr.sort(function(a, b) {
    return a - b;
    });
    var sumA = sortArr[0] * sortArr[1] * sortArr[sortArr.length];
    var sumB = sortArr[sortArr.length] * sortArr[sortArr.length - 1] * sortArr[sortArr.length - 2];
    console.log((sumA - sumB) > 0 ? sumA : sumB);
  • 在n个连续的整形元素中随机抽取n-1个元素组成无序的数组,在给定n个连续的元素上下界的情况下,找出被漏掉的元素并且T=O(n)。比如, 在上下界为1、9的9个元素中抽取8个组成数组[2, 5, 1, 4, 9, 6, 3, 7],找出被漏掉的元素。

    求出n个连续元素的和以及无序数组的和,两者相减即可。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var arr = [2, 5, 1, 4, 9, 6, 3, 7];
    var upper = 9;
    var lower = 1;
    var arrSum = 0;
    for (var i = 0; i < arr.length; i++) {
    arrSum += arr[i];
    }

    var sum = (9-1+1)/2 * (9+1);

    console.log(sum - arrSum);
  • 数组去重

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    var array = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];

    1.使用ES6的Set
    console.log(Array.from(new Set(array));

    2.
    function unique(array) {
    var temp = [];
    for(var i = 0; i<array.length; i++) {
    if (temp.indexOf(array[i]) == -1) {
    temp.push(array[i]);
    }
    }

    return temp;
    }

    console.log(unique(array));