세 숫자의 최대 곱

연습할 플랫폼



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

좋은 웹페이지 즐겨찾기