Viết hàm nhận mảng số, trả về mảng con chứa các phần tử lớn hơn tất cả các phần tử nằm bên phải nó.
Ví dụ
Mảng: [12, 45, 6, 4, 23, 23, 21, 1]
Duyệt từ phải sang trái, giữ track max:
- 1: max=1 → giữ
- 21 > 1 → giữ, max=21
- 23 > 21 → giữ, max=23
- 23 = 23 → không giữ (không lớn hơn)
- 4, 6 < 23 → không giữ
- 45 > 23 → giữ, max=45
- 12 < 45 → không giữ
Kết quả: [1, 21, 23, 45] (theo thứ tự từ phải sang trái)
Giải pháp
Dùng reduceRight:
const arr = [12, 45, 6, 4, 23, 23, 21, 1];
const largerThanRight = (arr = []) => {
return arr.reduceRight((acc, val) => {
let { largest, res } = acc;
if (val > largest) {
res.push(val);
largest = val;
}
return { largest, res };
}, { largest: -Infinity, res: [] }).res;
};
console.log(largerThanRight(arr));
Kết quả
Đầu ra trong console:
[1, 21, 23, 45]