Mô tả bài toán
Xóa tất cả số âm khỏi mảng, chỉ được dùng pop(), không tạo mảng tạm.
Ví dụ minh họa
// strip all negatives off the end
while (x.length && x[x.length - 1] < 0) {
x.pop();
}
for (var i = x.length - 1; i >= 0; i--) {
if (x[i] < 0) {
x[i] = x[x.length - 1];
x.pop();
}
}
Kết quả
[ 1, 8, 9 ]
Giải thích thuật toán
- Xóa số âm ở cuối mảng bằng pop()
- Duyệt ngược: nếu gặp số âm, ghi đè bằng phần tử cuối (đã biết là dương), pop() bỏ phần tử cuối
Lưu ý
Thứ tự các số dương không bị bảo toàn. Cách này O(n) time, O(1) space, nhưng destructive.
Cách thực tế
const filtered = arr.filter(x => x >= 0);