Computer >> Máy Tính >  >> Lập trình >> Javascript

Tổng mảng con tối đa trong mảng tròn sử dụng JavaScript

Vấn đề

Chúng tôi được yêu cầu viết một hàm JavaScript lấy một mảng các số nguyên, arr, làm đối số đầu tiên và duy nhất.

Chúng ta có thể coi mảng arr này là một mảng tròn, nghĩa là phần tử cuối cùng của mảng sẽ đứng sau phần tử đầu tiên. Hàm của chúng ta sẽ tìm và trả về tổng tối đa có thể có của một mảng con không rỗng của arr.

Ví dụ:nếu đầu vào của hàm là

Đầu vào

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

Đầu ra

const output = 4;

Giải thích đầu ra

Bởi vì mảng con mong muốn là [3, -1, 2]

Ví dụ

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));

Đầu ra

4