美文网首页web前端前端面试
学习笔记-JavaScript数组编程题

学习笔记-JavaScript数组编程题

作者: 鐵衣 | 来源:发表于2020-11-24 16:21 被阅读0次

    1.给定一个整数数组, 找到从三个整数中产生的最大乘积
    示例:

    const unsortedArray = [-10, 7, 29, 30, 5, -10, -70];
    computeProduct(unsortedArray); // 21000
    

    解答:

    function sortIntegers(a, b) {
      return a - b;
    }
    
    function computeProduct(unsorted) {
      const sortedArray = unsorted.sort(sortIntegers);
      const array_n_element = sortedArray.length - 1;
    
      let product1 = 1;
      let product2 = 1;
    
      for (let x = array_n_element; x > array_n_element - 3; x--) {
        product1 = product1 * sortedArray[x];
      }
    
      product2 = sortedArray[0] * sortedArray[1] * sortedArray[array_n_element];
    
      if (product1 > product2) return product1;
    
      return product2;
    }
    

    2. 一个未排序的数组包含 n 个连续数字中的(n-1)个数字,找到缺失的数字,要求时间复杂度为 O(n)
    示例:

    const arrayOfIntegers = [2, 5, 1, 4, 9, 6, 3, 7];
    const upperBound = 9;
    const lowerBound = 1;
    
    findMissingNumber(arrayOfIntegers, upperBound, lowerBound); // 8
    

    解答:

    function findMissingNumber(arrayOfIntegers, upperBound, lowerBound) {
      let sumOfIntegers = 0;
      for (let i = 0; i < arrayOfIntegers.length; i++) {
        sumOfIntegers += arrayOfIntegers[i]; // 得到数组的和(不包含缺失数字)
      }
    
      upperLimitSum = (upperBound * (upperBound + 1)) / 2; // (n*(n+1))/2得到1到n的和
      lowerLimitSum = (lowerBound * (lowerBound - 1)) / 2; // 得到1到最小数字的和
    
      theoreticalSum = upperLimitSum - lowerLimitSum; // 得到最小数字到n的和
    
      return theoreticalSum - sumOfIntegers;
    }
    

    3. 数组去重
    示例:

    const array = [1, 2, 3, 5, 1, 5, 9, 1, 2, 8];
    
    uniqueArray(array); // [1, 2, 3, 5, 9, 8]
    

    解答:

    // ES6
    Array.from(new Set(array)); // [1, 2, 3, 5, 9, 8]
    
    // ES5
    function uniqueArray(array) {
      const hashmap = {};
      const unique = [];
    
      for(let i = 0; i < array.length; i++) {
        if(!hashmap.hasOwnProperty(array[i])) {
          hashmap[array[i]] = 1;
          unique.push(array[i]);
        }
      }
    
      return unique;
    }
    

    4. 给定一个整数数组,请找出两个元素之间的最大差,较小值的元素必须位于较大元素之前
    示例:

    const array = [7, 8, 4, 9, 9, 15, 3, 1, 10];
    
    findLargestDifference(array); // 11  4 和 15
    

    解答:

    function findLargestDifference(array) {
      if (array.length <= 1) return -1;
      let currentMin = array[0];
      let currentMaxDifference = 0;
      
      for (let i = 1; i < array.length; i++) {
        if (array[i] > currentMin && (array[i] - currentMin > currentMaxDifference)) {
          currentMaxDifference = array[i] - currentMin;
        } else if (array[i] <= currentMin) {
          currentMin = array[i];
        }
      }
    
      if (currentMaxDifference <= 0) return -1;
    
      return currentMaxDifference;
    }
    

    5. 给定一个整数数组,返回一个数组,其中 output [i] 等于自身以外的所有元素的乘积,要求时间复杂度为 O(n)
    示例:

    const firstArray = [2, 2, 4, 1];
    const secondArray = [0, 0, 0, 2];
    const thirdArray = [-2, -2, -3, 2];
    
    productExceptSelf(firstArray); // [8, 8, 4, 16]
    productExceptSelf(secondArray); // [0, 0, 0, 0]
    productExceptSelf(thirdArray); // [12, 12, 8, -12]
    

    解答:

    function productExceptSelf(numArray) {
      let product = 1;
      const size = numArray.length;
      const output = [];
    
      for (let x = 0; x < size; x++) {
        output.push(product);
        product = product * numArray[x];
      }
    
      let product2 = 1;
      for (let i = size - 1; i > -1; i--) {
        output[i] = output[i] * product2;
        product2 = product2 * numArray[i];
      }
    
      return output;
    }
    

    6. 求两个数组的交集
    示例:

    const firstArray = [2, 2, 4, 1];
    const secondArray = [1, 2, 0, 2];
    
    intersection(firstArray, secondArray); // [2, 1]
    

    解答:

    function intersection(firstArray, secondArray) {
      const hashmap = {};
      const intersectionArray = [];
    
      firstArray.forEach(element => {
        hashmap[element] = 1;
      });
    
      secondArray.forEach(element => {
        if (hashmap[element] === 1) {
          intersectionArray.push(element);
          hashmap[element]++;
        }
      });
    
      return intersectionArray;
    }
    

    相关文章

      网友评论

        本文标题:学习笔记-JavaScript数组编程题

        本文链接:https://www.haomeiwen.com/subject/bwniiktx.html