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