-
152. Maximum Product Subarray / LeetCode카테고리 없음 2019. 12. 16. 18:37728x90
루프를 3번 사용해서, 모든 부분집합의 곱을 구한 뒤에, 가장 큰 값을 찾는 방식으로 푸는 방법이 있습니다.
하지만 이방법으로는 time limit에 걸립니다.- 길이가 1인 부분집합을 구하고
- 최대값을 구하고
- 길이가 1일 부분집합을 길이가 2인 부분집합으로 만들기 위해서, 길이가 1인 부분집합의 다음번 수를 곱합니다.
- 최대값을 구합니다.
- 3번 ~ 4번을 반복해서, nums와 같은 부분집합을 만들때 까지 반복합니다.
이렇게 구현하면, accpected는 되지만, 그렇게 속도가 빠른 방식은 아니네요.
곱하기만 하기 때문에, 0과 음수의 개수를 고려 해서, 구현하면 보다 빠른 방식찾을 수 있을 것 같습니다.class Solution { public int maxProduct(int[] nums) { int r = nums[0]; int[] v = new int[nums.length]; int N = v.length; for(int i=0; i<v.length; ++i) v[i] = 1; for(int lengthOfSubarray = 1; lengthOfSubarray <= N; ++lengthOfSubarray) { for(int i=lengthOfSubarray-1, vi=0; i<N; ++i, ++vi) { v[vi] *= nums[i]; r = Math.max(r, v[vi]); } } return r; } }
728x90