Chúng ta cần viết một hàm JavaScript nhận vào một mảng số nguyên (dương và âm) làm đối số đầu tiên và duy nhất. Hàm nên tìm và trả về tích của mảng con nơi tích đạt tối đa.
Ví dụ:
Nếu mảng đầu vào là:
const arr = [4, -5, 2, -3, 1, -4, 0, -3];
Thì đầu ra nên là:
const output = 120
vì mảng con có tích lớn nhất là [4, -5, 2, -3]
Ví dụ
Dưới đây là mã nguồn:
const arr = [4, -5, 2, -3, 1, -4, 0, -3]; const maxProduct = (arr = []) => { if (arr.length === 0){ return 0; }; let max = arr[0], min = arr[0], greatest = arr[0]; for (let i = 1; i <= arr.length - 1; i++) { let tempMax = max * arr[i]; max = Math.max( arr[i], Math.max(min * arr[i], max * arr[i]) ); min = Math.min(arr[i], Math.min(min * arr[i], tempMax)); greatest = Math.max(greatest, max); } return greatest; }; console.log(maxProduct(arr));Kết quả
Đầu ra trên console:
120
Giải thích: Maximum Product Subarray (LeetCode 152). Giữ track cả max và min product ending at i vì số âm * min(âm) = max(dương). O(n) time, O(1) space. Reset tại 0.