Mô tả vấn đề
Hàm JavaScript nhận vào mảng số nguyên arr. Giả sử hai chỉ số i, j thỏa: i < j và arr[i] ≤ arr[j]. Trong tất cả các cặp (i, j) như vậy, hàm trả về chênh lệch j - i lớn nhất.
Ví dụ, nếu đầu vào là:
const arr = [6, 0, 8, 2, 1, 5];
Thì đầu ra nên là:
const output = 4;
Giải thích đầu ra
Chênh lệch lớn nhất tại (i, j) = (1, 5): arr[1] = 0, arr[5] = 5.
Ví dụ minh họa
Mã thực hiện (stack đơn điệu + duyệt ngược):
const arr = [6, 0, 8, 2, 1, 5];
const maximumDifference = (arr = []) => {
let max = 0;
const stack = [0];
for (let i = 1; i < arr.length; i++) {
if (arr[i] < arr[stack[stack.length - 1]]) {
stack.push(i);
}
}
for (let i = arr.length - 1; i >= 0; i--) {
while (arr[i] >= arr[stack[stack.length - 1]]) {
max = Math.max(max, i - stack.pop());
}
}
return max;
};
console.log(maximumDifference(arr));Đầu ra
Kết quả trong console:
4