Viết hàm đệ quy xóa các phần tử trùng lặp liên tiếp trong mảng (in-place, không dùng bộ nhớ thêm).
Ví dụ
Đầu vào: [17, 17, 17, 12, 12, 354, 354, 1, 1, 1]
Kết quả: [17, 12, 354, 1]
Giải pháp
Mã triển khai đệ quy:
const arr = [17, 17, 17, 12, 12, 354, 354, 1, 1, 1];
const removeConsecutiveDuplicates = (arr, index = 0) => {
if (index >= arr.length - 1) return;
if (arr[index] === arr[index + 1]) {
arr.splice(index + 1, 1);
removeConsecutiveDuplicates(arr, index); // Kiểm tra lại vị trí này
} else {
removeConsecutiveDuplicates(arr, index + 1);
}
};
removeConsecutiveDuplicates(arr);
console.log(arr);
Kết quả
Đầu ra trong console:
[17, 12, 354, 1]
Giải thích: So sánh phần tử hiện tại với phần tử tiếp theo. Nếu trùng, xóa phần tử tiếp theo và kiểm tra lại tại cùng vị trí.