Yêu em Thu Nga CN12 ptit
Senior Member
bài này hôm kia e vừa thực hành xongNay vừa vào làm thử 1 bài LeetCode, đề cũng đơn giản nhưng có giới hạn bộ nhớ nên cũng khá khoai. Các bác hứng thú có thể vào thảo luận cho vui![]()

bài này hôm kia e vừa thực hành xongNay vừa vào làm thử 1 bài LeetCode, đề cũng đơn giản nhưng có giới hạn bộ nhớ nên cũng khá khoai. Các bác hứng thú có thể vào thảo luận cho vui![]()

đây là nlogn mà cái dòng if đầu tiên cho vào làm gì vậy fenn.logn thì dễ mà o(n) thì sao nhỉ
C++:class Solution { public: int firstMissingPositive(vector<int>& a) { sort(a.begin(),a.end()); int n=a.size(); int min=1; for(int i=0;i<n;i++){ if(a[i]<0) a[i]=0; if(a[i]==min) min++; } return min; } };
, chắc năm sau mới đi tìm việc được, mà fen phải post 1 bài tập vào nó mới tránh thành comment spam hâhacó việc chưa anh
Nay vừa vào làm thử 1 bài LeetCode, đề cũng đơn giản nhưng có giới hạn bộ nhớ nên cũng khá khoai. Các bác hứng thú có thể vào thảo luận cho vui![]()



nhận xét có ích ghê thímBài này t từng làm rồi. Có một nhận xét là kết quả cần tìm sẽ luôn nằm trong khoảng từ [1,nums.size()].![]()


Nói thật hay nói đểu vậy?nhận xét có ích ghê thím![]()

class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
for (int i = 0; i < nums.size(); ++i) {
while (nums[i] != i+1 && nums[i] <= nums.size() && nums[i] > 0 && nums[i] != nums[nums[i]-1]) swap(nums[i], nums[nums[i]-1]);
}
int i;
for (i = 0; i < nums.size() && nums[i] == i+1; ++i);
return i+1;
}
};
fixed mem thì là O(1) chứ fenCách của bác @_Gia_Cat_Luong_ là O(N) bộ nhớ rồi mà nhỉ. Mình nghĩ cách của bác @thuyduong2007 mới là cách chuẩn. Cơ mà đoạn xử lý swap đấy cũng không phải đơn giản.
Mình thấy mấy bài interview hay có cái trò bắt phải sử dụng lại bộ nhớ trong input để làm những thứ khác. Mình khá anti với những bài thế này vì nó là một practice cực kì tệ khi code. Nguyên tắc vẫn nên là mỗi biến phải dùng cho một mục đích riêng chứ không nên dùng lẫn vào nhau như thế.
. Cách của mình dĩ nhiên là cheaty, nhưng nếu đánh giá đúng lý thuyết thì vẫn là O(1) :v.Ko đồng ý nhé, ví dụ Arrays.sort(int[]), hoặc builder pattern.Cách của bác @_Gia_Cat_Luong_ là O(N) bộ nhớ rồi mà nhỉ. Mình nghĩ cách của bác @thuyduong2007 mới là cách chuẩn. Cơ mà đoạn xử lý swap đấy cũng không phải đơn giản.
Mình thấy mấy bài interview hay có cái trò bắt phải sử dụng lại bộ nhớ trong input để làm những thứ khác. Mình khá anti với những bài thế này vì nó là một practice cực kì tệ khi code. Nguyên tắc vẫn nên là mỗi biến phải dùng cho một mục đích riêng chứ không nên dùng lẫn vào nhau như thế.
ans = 2n! // 2 % ( 10^9 + 7 )


code chứ công thức tui cũng bikans = 2n! // 2 % ( 10^9 + 7 )
![]()
Bác có thể giải thích thêm về Arrays.sort được không? Bác sort lại mảng thì ý nghĩa của mảng vẫn là chứa các dữ liệu, chỉ thay đổi vị trí các phần tử. Còn trong bài kia thì dùng mảng input như mảng đánh dấu là thay đổi hoàn toàn ý nghĩa của mảng rồi.Ko đồng ý nhé, ví dụ Arrays.sort(int[]), hoặc builder pattern.
Duyệt hết qua tất cả 10000 số rồi check xem có 0/1 hay nhiều hơn 1 số thỏa input?