세 숫자의 최대 곱
연습할 플랫폼
Leetcode problem
구현
const maxProduct = arr => {
if (arr.length < 3) return false;
const max3 = [-Infinity, -Infinity, -Infinity];
const min2 = [Infinity, Infinity];
for (let i = 0; i < arr.length; ++i) {
const n = arr[i];
if (n > max3[0]) {
max3[0] = n;
max3.sort((a, b) => a - b);
}
if (n < min2[0]) {
min2[0] = n;
min2.sort((a, b) => b - a);
}
}
return max3[2] * Math.max(min2[0] * min2[1], max3[0] * max3[1]);
};
복잡성
시간 복잡도: O(n)
공간 복잡도: O(1)
설명
3개의 최대 요소와 2개의 최소 요소를 유지하면서 배열을 순환합니다.
min 요소가 더 큰 절대값을 가질 수 있기 때문에 우리는 2 min 요소를 원합니다. 제품을 계산할 때 항상 2개의 음수는 1개의 양수를 제공하므로 제품이 최대 3개의 작은 수 2개보다 크지 않은지 확인하는 데 2분이면 됩니다.
내 github 참조
https://github.com/gkucmierz/algorithms/blob/master/problems/maximum_product_of_three_numbers.js
인스타코드 놀이터
instacode.dev
Reference
이 문제에 관하여(세 숫자의 최대 곱), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/gkucmierz/maximum-product-of-three-numbers-nk5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)