文章目錄
- 1、問題
- 2、示例
- 3、解決方法
- (1)方法1
- 總結
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:淺拷貝原數組為newArraylet 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],之后通過遍歷獲取乘積插入新數組。