Javascript每天一道算法题(十六)——获取除自身以外数组的乘积_中等


1、问题

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。
题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请 不要使用除法,且在 O(n) 时间复杂度内完成此题。

2、示例

示例 1:
输入: nums = [1,2,3,4]
输出: [24,12,8,6]
示例 2:
输入: nums = [-1,1,0,-3,3]
输出: [0,0,9,0,0]

题目的详细说明:如示例1:
2 * 3 * 4 = 24
1 * 3 * 4 = 12
1 * 2 * 4 = 8
1 * 2 * 3 = 6
返回数组 [24,12,8,6]

3、解决方法

(1)方法1

知识点:如果不加上abs方法多话,实际效果会返回-0,为了和输出效果一样,还是加上了。js中 -0 === 0,其实都一样。JavaScript 使用 IEEE 754 标准来表示数字,这个标准允许 0 有一个正的和负的表示。

let nums = [-1,1,0,-3,3]
var productExceptSelf = function(nums) {
    
    
    // 1: 定义一个返回效果的新数组
    let arr = [];
    // 2; 遍历nums数组
    nums.forEach((item, index) => {
    
    
        // 3-1:浅拷贝原数组为newArray
        let newArray = [...nums];
        // 3-2: 根据当前的下标获取除自身外的所有数组的值
        newArray.splice(index,1);
        // 4: 定义一个获取乘积初始值为1的值sum(如果是相加就为0)
        let sum = 1 // 注意: sum不为1会影响最终结果,1乘以任何数都等于其本身
        // 5:将第三步截取除去当前数据本身的所有数组进行遍历,获取乘积
        for(let i = 0; i< newArray.length ; i++) {
    
    
            // 8:使用abs方法添加绝对值,如果不加的话会导致示例二出现-0的情况
            // 这玩意我还特的搜索了一下:js中 -0 === 0,其实都一样
            // JavaScript 使用 IEEE  754 标准来表示数字,这个标准允许 0 有一个正的和负的表示。
            sum = Math.abs(sum * newArray[i]) 
        }
        // 6:将相乘后的数据添加到数组中
        arr.push(sum);
    });
    // 7: 返回数组
    console.log('arr', arr);
};
productExceptSelf(nums)

总结

(1)难度: 中等
(2)思路:通过splice截取获取除当前下标的每一项的数组,如[1,2,3,4]第一次获取[2,3,4],之后通过遍历获取乘积插入新数组。

猜你喜欢

转载自blog.csdn.net/weixin_44784401/article/details/134602813