thảo luận Leetcode mỗi ngày

mình cũng cày lc, dsa, oop. Mà khổ cái pvan dạo mấy cty ở VN toàn hỏi frame work, ngôn ngữ, rồi OS, networking. Auto tạch nản quá, mà đúng là mấy cái đó chỉ có nhớ thuộc lòng mới trả lời được chứ không xài tư duy được, ôn thì quá nhiều
Hơ hơ mình thấy hỏi mấy cái đó tốt hơn hỏi thuật toán mà nhỉ, mà sao lại thuộc lòng mới trả lời được ?

  • Framework + ngôn ngữ: là test kinh nghiệm, xem bác có thật sự dùng cái đó đủ lâu như trong CV kể chưa. Nếu dùng đủ lâu thật thì mấy câu này lại chả trúng tủ quá, trừ khi thích hỏi bắt bẻ thôi.
  • OS, Networking: Cái này thì kiến thức chung chung mà nhỉ, hiểu bản chất của tụi nó là chém gió được chứ đâu cần học thuộc.

Hay tui hiểu sai ý bác nhỉ ? Bác share vài câu demo thử ?
 
Hơ hơ mình thấy hỏi mấy cái đó tốt hơn hỏi thuật toán mà nhỉ, mà sao lại thuộc lòng mới trả lời được ?

  • Framework + ngôn ngữ: là test kinh nghiệm, xem bác có thật sự dùng cái đó đủ lâu như trong CV kể chưa. Nếu dùng đủ lâu thật thì mấy câu này lại chả trúng tủ quá, trừ khi thích hỏi bắt bẻ thôi.
  • OS, Networking: Cái này thì kiến thức chung chung mà nhỉ, hiểu bản chất của tụi nó là chém gió được chứ đâu cần học thuộc.

Hay tui hiểu sai ý bác nhỉ ? Bác share vài câu demo thử ?
kiến thức chung fen nói là đúng rồi đó, nhưng t chỉ biết định nghĩa nó thôi, hỏi sâu hơn thì chịu. ví dụ nhớ osi có 7 layer, chứ còn kể tên + nó chạy với data gì thì chịu.
Nói chung nắm kiến thức này khi nào làm thì gg tầm 5p thôi, chứ nhớ để trả lời bất chợt thì nhiều lắm
 
Hơ hơ mình thấy hỏi mấy cái đó tốt hơn hỏi thuật toán mà nhỉ, mà sao lại thuộc lòng mới trả lời được ?

  • Framework + ngôn ngữ: là test kinh nghiệm, xem bác có thật sự dùng cái đó đủ lâu như trong CV kể chưa. Nếu dùng đủ lâu thật thì mấy câu này lại chả trúng tủ quá, trừ khi thích hỏi bắt bẻ thôi.
  • OS, Networking: Cái này thì kiến thức chung chung mà nhỉ, hiểu bản chất của tụi nó là chém gió được chứ đâu cần học thuộc.

Hay tui hiểu sai ý bác nhỉ ? Bác share vài câu demo thử ?
bác này nói đúng này
hỏi mấy cái này thì làm thật thì sợ cái gì :big_smile:
em chưa pvan tier 1 bao giờ những được cái chưa bao giờ tạch pvan
chắc khi nào thử tiếp xúc vs tier 1 xem
 
kiến thức chung fen nói là đúng rồi đó, nhưng t chỉ biết định nghĩa nó thôi, hỏi sâu hơn thì chịu. ví dụ nhớ osi có 7 layer, chứ còn kể tên + nó chạy với data gì thì chịu.
Nói chung nắm kiến thức này khi nào làm thì gg tầm 5p thôi, chứ nhớ để trả lời bất chợt thì nhiều lắm
À, hỏi kiểu kể tên 7 lớp OSI thì thôi mình cũng tạch :v. Hỏi lý thuyết chay kiểu này đúng khó chịu thật. Thím apply level nào v ?
 
1655961150099.png


https://leetcode.com/submissions/detail/729028070/

Beat 99.02%. Thuật toán thì Vẫn làm theo hint không có gì khác cả.
Trick ở đây là chuyển cái array đầu vào vector<vector<int>> thành vector<pair<short, short>> để giảm dung lượng loại bỏ phân mảnh bộ nhớ.
Cái priority queue thì reserve trước với kích thước bằng đầu vào để đỡ phải allocate nhiều lần sau này.
 
Tui thấy giống bài cầu thang và gạch hôm bữa, cũng greedy và ý tưởng tương tự.
Lúc mới đọc qua thì t thấy nó khá giống 0-1 knapsack. Chỉ khác 1 chút ở điều kiện ràng buộc và hàm tối ưu. Nên t nghĩ dùng dp + memoization sẽ giải được. Tuy nhiên đọc kỹ thì đúng là có thể giải bằng greedy giống bài cái thang với gạch hôm trước. :big_smile:
 
Mà thấy anh em chỉ care về LC nhỉ, có ae nào luyện Sys Design k ?

sys design vô chừng, tùy theo yêu cầu scale mà phù hợp ít hay nhiều thôi, đâu có pass/fail giống như algorithm nên khó thảo luận lắm.

Sent from Samsung SM-A528B using vozFApp
 
sys design vô chừng, tùy theo yêu cầu scale mà phù hợp ít hay nhiều thôi, đâu có pass/fail giống như algorithm nên khó thảo luận lắm.

Sent from Samsung SM-A528B using vozFApp
Đúng rồi bạn. Nhưng mình thấy càng lên cao thì system design càng quan trọng. Ae có thể lập thêm 1 thread nữa, và thảo luận xung quanh 1 vài system nào đó. Có thể theo từng chủ đề trong cuốn sách của Alex Xu cũng đc.
 
Đúng rồi bạn. Nhưng mình thấy càng lên cao thì system design càng quan trọng. Ae có thể lập thêm 1 thread nữa, và thảo luận xung quanh 1 vài system nào đó. Có thể theo từng chủ đề trong cuốn sách của Alex Xu cũng đc.

Không lẽ mỗi ngày 1 câu hỏi sys design :p:p

Sent from Samsung SM-A528B using vozFApp
 
Đúng rồi bạn. Nhưng mình thấy càng lên cao thì system design càng quan trọng. Ae có thể lập thêm 1 thread nữa, và thảo luận xung quanh 1 vài system nào đó. Có thể theo từng chủ đề trong cuốn sách của Alex Xu cũng đc.
Share sách nào fen ? Có review gì cuốn này k ?
 
Thím chia sẻ cách học leetcode đi

Kinh nghiệm của tôi như vầy:

  • Tôi ôn leetcode vì cũng thích thuật toán, cũng muốn vào các công ty tier 1 VN chứ không mơ đến FAANG. Nên chỉ cố gắng ghi nhớ các thuật toán dễ nhớ, dễ cài đặt. Nhiều bài toán có cách tối ưu đến O(logn) nhưng quá khó nhớ, thì chỉ cần nhớ đến O(nlogn) là được.
  • Mỗi khi giải bài LC thì cố gắng tự làm trước, dùng thuật toán lởm nhất cũng được, miễn pass test case là được. Sau đó mới tìm xem còn cách nào hay hơn không, vì sao nó hay hơn cách của mình... Khi hiểu vì sao nó tối ưu hơn thì tự khác các thím sẽ nhớ được lâu.
  • Mỗi ngày chỉ nên làm LC khoảng 1h thôi, không nên nhồi nhét lâu hơn. Nếu 1h vẫn chưa tìm ra cách giải thì có thể nghỉ ngày hôm đó, hoặc google cách giải nếu các thím vẫn muốn try hard.
 
1655974200104.png

Bài này mình sort mảng 2 chiều theo last day tăng dần. Dùng 1 biến totalDuration để lưu tổng thời gian đã học.

Bắt đầu tính nếu thêm duration của Course mới thì có bị vượt lastDay hay không. Có thì bỏ sang Course tiếp theo còn không thì học và totalDuration += duration.

Tuy nhiên cách này khi gặp những Course có duration dài xếp ở trước thì sẽ bị hụt mất những khóa ở sau nên mình dùng PriorityQueue để lưu lại các khóa đã học theo xếp độ ưu tiên theo duration.

Khi duyệt vòng lặp nếu totalDuration đã vượt lastDay thì mình sẽ check lại trong queue xem khóa nào có duration lớn nhất thì đổi cho khóa hiện tại rồi kiểm tra nếu có thể học được thì sẽ tính lại totalDuration.

Cái PriorityQueue của C# nó hơi ngu là Dequeue số nhỏ ra trước nên mình xài trick tí :shame:
C#:
public class Solution {
    public int ScheduleCourse(int[][] courses) {
        Array.Sort(courses, (a,b) => a[1] - b[1]);
        PriorityQueue<int,int> queue = new PriorityQueue<int,int>();
        int totalDuration = 0, duration = 0, lastDay = 0;
        foreach(int[] course in courses){
            if(totalDuration + course[0] <= course[1]){
                queue.Enqueue(course[1], 1000000 - course[0]);
                totalDuration += course[0];
            }
            else {               
                if(queue.TryPeek(out lastDay, out duration)){
                    duration = 1000000 - duration;
                    if(duration > course[0]){
                        queue.Dequeue();
                        totalDuration += course[0] - duration;
                        queue.Enqueue(course[1], 1000000 - course[0]);
                    }
                }
            }         
        }
        return queue.Count;
    }
}
 
View attachment 1226539
Bài này mình sort mảng 2 chiều theo last day tăng dần. Dùng 1 biến totalDuration để lưu tổng thời gian đã học.

Bắt đầu tính nếu thêm duration của Course mới thì có bị vượt lastDay hay không. Có thì bỏ sang Course tiếp theo còn không thì học và totalDuration += duration.

Tuy nhiên cách này khi gặp những Course có duration dài xếp ở trước thì sẽ bị hụt mất những khóa ở sau nên mình dùng PriorityQueue để lưu lại các khóa đã học theo xếp độ ưu tiên theo duration.

Khi duyệt vòng lặp nếu totalDuration đã vượt lastDay thì mình sẽ check lại trong queue xem khóa nào có duration lớn nhất thì đổi cho khóa hiện tại rồi kiểm tra nếu có thể học được thì sẽ tính lại totalDuration.

Cái PriorityQueue của C# nó hơi ngu là Dequeue số nhỏ ra trước nên mình xài trick tí :shame:
C#:
public class Solution {
    public int ScheduleCourse(int[][] courses) {
        Array.Sort(courses, (a,b) => a[1] - b[1]);
        PriorityQueue<int,int> queue = new PriorityQueue<int,int>();
        int totalDuration = 0, duration = 0, lastDay = 0;
        foreach(int[] course in courses){
            if(totalDuration + course[0] <= course[1]){
                queue.Enqueue(course[1], 1000000 - course[0]);
                totalDuration += course[0];
            }
            else {               
                if(queue.TryPeek(out lastDay, out duration)){
                    duration = 1000000 - duration;
                    if(duration > course[0]){
                        queue.Dequeue();
                        totalDuration += course[0] - duration;
                        queue.Enqueue(course[1], 1000000 - course[0]);
                    }
                }
            }         
        }
        return queue.Count;
    }
}

Cái PriorityQueue nếu thím muốn pop ra item lớn nhất thì chỉ cần enqueue(..., -priority) là được, không cần 1000000-priority

Sent from Samsung SM-A528B using vozFApp
 
Back
Top