cuốn sách gpt4 ai đã làm

c++ - Tại sao xóa+xóa lại hiệu quả hơn xóa

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 04:03:54 25 4
mua khóa gpt4 Nike

Tôi đang viết mã C++ để giải quyết vấn đề này trong Leetcode:https://leetcode.com/problems/remove-element/

Cho một mảng nums và một giá trị val, hãy loại bỏ tất cả các phiên bản của giá trị đó tại chỗ và trả về độ dài mới.

Không phân bổ thêm không gian cho một mảng khác, bạn phải thực hiện việc này bằng cách sửa đổi mảng đầu vào tại chỗ với bộ nhớ bổ sung O(1).

Thứ tự của các phần tử có thể được thay đổi. Việc bạn để lại gì ngoài độ dài mới không thành vấn đề.

Ví dụ 1:

Cho các số = [3,2,2,3], val = 3,

Hàm của bạn phải trả về độ dài = 2, với hai phần tử đầu tiên của nums là 2.

Việc bạn để lại những gì vượt quá độ dài được trả lại không thành vấn đề.

Tôi có hai giải pháp:

Giải pháp A:

int RemoveElement(vector& nums, int val) {
nums.erase(remove(begin(nums), end(nums), val), end(nums));
trả về nums.size();
}

Giải pháp B:

int RemoveElement(vector& nums, int val) {
auto it = std::remove(nums.begin(), nums.end(), val);
return it-nums.begin();
}

Theo tôi, phương án B nên nhanh hơn phương án A. Tuy nhiên, kết quả lại hoàn toàn ngược lại:

Giải pháp A mất 0 mili giây, trong khi Giải pháp B mất 4 mili giây.

Tôi không biết tại sao xóa+xóa So sánh remove nhanh.

câu trả lời hay nhất

Đối với các vectơ thuộc loại có thể phá hủy thông thường (int là một loại như vậy),xóa(nó, end()) Thông thường chỉ cần giảm kích thước thành viên (hoặc thành viên con trỏ, tùy thuộc vào chiến lược triển khai) hầu như không mất thời gian. 4 mili giây là một sự khác biệt rất nhỏ. Nó có thể dễ dàng được gây ra bởi tình trạng của máy. Và tôi không mong đợi những khác biệt nhỏ như vậy sẽ được tái tạo.

Nếu bạn thực sự muốn xóa các phần tử khỏi vectơ, hãy sử dụng phiên bản đầu tiên. nếu bạn thực sự muốn làm std::xóa Để làm điều gì đó (mà bạn có thể không muốn làm), hãy sử dụng phiên bản thứ hai. Hiệu suất không phải là vấn đề ở đây.

Về c++ - tại sao xóa+xóa lại hiệu quả hơn xóa, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/57818078/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress