前言
這題有點類似 Prefix Sums 的概念,目標是找到陣列中元素自己以外的所有元素的乘績,放在一個新的陣列裡,雖然有三個迴圈是 O(3n)
的時間複雜度,但常數項通常會被省略,因此該演算法可達 O(n)
的時間複雜度,這裡有 JAVA 和 Python 的寫法。
題目
Given an integer array
nums
, return an arrayanswer
such thatanswer[i]
is equal to the product of all the elements ofnums
exceptnums[i]
.
The product of any prefix or suffix ofnums
is guaranteed to fit in a 32-bit integer.
You must write an algorithm that runs inO(n)
time and without using the division operation.
給定一個整數陣列
nums
,回傳一個陣列answer
,其中answer[i]
等於所有元素的乘積,除了nums[i]
保證nums
陣列中任何的前後綴都適合 32-bit 的整數
你必須寫出一個時間複雜度為O(n)
的算法且不能使用除法
題目連結:https://leetcode.com/problems/product-of-array-except-self/
題目限制
2 <= nums.length <= 105
30 <= nums[i] <= 30
The product of any prefix or suffix of nums
is guaranteed to fit in a 32-bit integer.
範例
1 | Input: nums = [1,2,3,4] |
nums [0] ⇒ 把 2、3、4 都乘起來
nums [1] ⇒ 把 1、3、4 都乘起來
(以此類推)
把全部乘完的元素都放在 answer
裡
1 | Input: nums = [-1,1,0,-3,3] |
nums [0] ⇒ 把 1、0、-3、3 都乘起來
nums [1] ⇒ 把 -1、0、-3、3 都乘起來
(以此類推)
把全部乘完的元素都放在 answer
裡
思路&筆記
- 簡而言之我們要把除了
nums[i]
以外的元素乘起來,並且對每一個i
做一樣的事情- 然後每個索引之前之後的元素都要相乘,就是
自己前面的乘積
*自己後面的乘積
JAVA 實現
1 | class Solution { |
Python 實現
使用了和 Java 一樣的邏輯執行,換成 Python 的寫法。
1 | class Solution: |
成績
Language | Runtime | Memory |
---|---|---|
Java | 2ms | 53.43MB |
Python | 202ms | 25.48MB |