Product of Array Except Self
LeetCode 238. Product of Array Except Self
원문
Given an integer array nums
, return an array answer
such that answer[i]
is equal to the product of all the elements of nums
except nums[i]
.
The product of any prefix or suffix of nums
is guaranteed to fit in a 32-bit integer.
You must write an algorithm that runs in O(n)
time and without using the division operation.
시간초과
당연하다. O(n)
인 답을 찾아야 하는데 이건 O(n2)
이다.
아주 단순하게, 묘사한 상황 그대로 작성했다.
코드
1
2
3
4
5
6
7
8
9
10
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
result = [1 for i in range(len(nums))]
for i in range(len(nums)):
for j in range(len(nums)):
if i == j: continue
result[j] *= nums[i]
return result
도움!
이 영상을 참고했다.
- 모든 원소가 1이고 길이가
nums
와 같은 배열result
를 생성한다. - 1번 인덱스부터
result
를 순회한다.i
번 원소의 값을i - 1
번째 원소 *nums[i - 1]
로 갱신한다.- 이러면
result
의i
번째 값이nums
의0
번째 부터i - 1
번째 값까지의 곱이 된다.
- 변수
postfix
를 선언한다. 초기값은 1이다. len(nums) - 1
번 인덱스부터0
번 인덱스까지result
를 순회한다.i
번 원소의 값에postfix
를 곱한다.postfix
의 값에nums[i]
를 곱한다.- 이러면
postfix
의 값이nums
의i + 1
번째 값부터 마지막 값까지의 곱이 된다. - 따라서
postfix
를result[i]
에 곱하면nums[i]
를 제외한 원소의 곱과 같은 값이 된다.
- 이러면
result
를 반환한다.
코드
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution:
def productExceptSelf(self, nums: List[int]) -> List[int]:
result = [1 for i in range(len(nums))]
for i in range(1, len(nums)):
result[i] = result[i - 1] * nums[i - 1]
before = 1
for i in range(len(nums) - 1, -1, -1):
result[i] *= before
before *= nums[i]
return result
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public int[] productExceptSelf(int[] nums) {
int[] result = new int[nums.length];
result[0] = 1;
for (int i = 1; i < nums.length; i++) {
result[i] = result[i - 1] * nums[i - 1];
}
int before = 1;
for (int i = nums.length - 1; i >= 0; i--) {
result[i] *= before;
before *= nums[i];
}
return result;
}
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.