Thắc mắc về kết quả hàm trả về ở leetcode khác với kết quả chạy hàm trên repl.it

Chào mọi người, mình có giải bài 27 - Remove element trên leetcode thì mặc dù đầu vào là như nhau nhưng kết quả hàm trả về trên leetcode khác với repl.it như hình ở dưới nên thắc mắc không hiểu tại sao. Ai giúp mình với. Đây là đoạn code của mình viết bằng javascript.

var removeElement = function(nums, val) {

return nums.filter(num => num !== val).length;

};

Code khác nhau mà Bên leetcode có .length dòng 7 kìa, bên kia ko có

2 Likes

Cái này do yêu cầu đề bài là trả về độ dài của mảng sau khi đã xoá phần tử. Bạn nhìn vào chỗ cuối phía bên phải sẽ thấy nó trả về mảng [0,1,2,2,3] khác với repl.it [ 0,1,3,0,4] nên mình mới thắc mắc.

Ok. Vì code của bạn tạo ra mảng mới nên leetcode ko bắt đc sự thay đổi của array nums bạn có thể thấy output bên leetcode chính là input của bạn rồi leetcode cắt cho nó bằng length với expected thôi . Trong đề có nói mà . Để làm bài này bạn ko đc phép tạo ra mảng mới

Do not allocate extra space for another array, you must do this by  **modifying the input array [in-place](https://en.wikipedia.org/wiki/In-place_algorithm)**  with O(1) extra memory.
**Clarification:**

Confused why the returned value is an integer but your answer is an array?

Note that the input array is passed in by  **reference** , which means modification to the input array will be known to the caller as well.

Internally you can think of this:
5 Likes

[OT] Tại sao người ta không viết kiểu function removeElement() nhỉ :smiley:

Như bạn @Dao_An đã nói thì đúng rồi đấy. Let code sẽ sử dụng kết quả sau khi thực hiện hàm bạn viết ra để cắt array đã được bạn xử lí. Do đó bạn cần phải return ra length của array mới sau khi đã bỏ hết các item.
Có thể hình dung qua ví dụ sau:

var arr = [1,2,3,4,5]
...code run
arr // [1,3,4,5,2]

kiểu vậy, bạn chỉ được thay đổi arr input, k được tạo mảng mới

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?