Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript를 사용하는 원형 배열의 최대 하위 배열 합계

<시간/>

문제

첫 번째이자 유일한 인수로 정수 배열 arr을 취하는 JavaScript 함수를 작성해야 합니다.

이 배열 arr을 원형 배열로 간주할 수 있습니다. 즉, 배열의 마지막 요소 다음에 첫 번째 요소가 옵니다. 우리의 함수는 arr의 비어 있지 않은 부분배열의 가능한 최대 합을 찾아 반환해야 합니다.

예를 들어, 함수에 대한 입력이

인 경우

입력

const arr = [2, -2, 3, -1];

출력

const output = 4;

출력 설명

원하는 하위 배열이 [3, -1, 2]

이기 때문에

예시

const arr = [2, -2, 3, -1];
const maxSubarraySumCircular = (arr = []) => {
   let max = arr[0]
   let min = arr[0]
   let currentMax = max
   let currentMin = min
   let sum = arr[0]
   for (let i = 1; i < arr.length; i++) {
      currentMax = arr[i] + Math.max(currentMax, 0)
      max = Math.max(max, currentMax)
      currentMin = arr[i] + Math.min(currentMin, 0)
      min = Math.min(min, currentMin)
      sum += arr[i]
   }
   return max < 0 ? max : Math.max(max, sum - min)
}
console.log(maxSubarraySumCircular(arr));

출력

4