Chúng ta cần viết một hàm JavaScript nhận vào ba đối số, tức là:
arr --> mảng số nguyên m --> số nguyên dương n --> số nguyên dương
Nhiệm vụ của hàm là tìm xem có tồn tại hai phần tử (gọi chúng là a1 và a2) sao cho:
- Hiệu tuyệt đối giữa a1 và a2 tối đa là m
- Hiệu tuyệt đối giữa chỉ số của a1 và a2 tối đa là n
Ví dụ
Dưới đây là mã nguồn:
const arr = [1, 2, 3, 1, 7, 8]; const findSpecialElements = (arr = [], m, n) => { const map = arr .map((el, ind) => ({ el, ind })) .sort((a, b) => a.el - b.el); let left = 0; let right = 1; while (right < map.length) { const diff = Math.abs(map[right].el - map[left].el); const range = Math.abs(map[right].ind - map[left].ind); if (diff <= n && range <= m){ return true }else if (diff > n){ left++; }else if (range > m){ right++; }; if (left === right){ right++; }; }; return false; }; console.log(findSpecialElements(arr, 3, 0));Kết quả
Đầu ra trên console:
true
Lưu ý: Code có nhầm tham số: điều kiện kiểm tra diff <= n && range <= m nhưng tham số truyền vào là (arr, 3, 0) nghĩa là m=3, n=0. Logic code dùng n cho diff, m cho range - ngược với tên tham số. Bài toán類似 "Contains Duplicate III" (LeetCode 220).