Leetcode có dạy python không?

Thông tin về ứng dụng này

Giải pháp cho hơn 1000 vấn đề thuật toán phổ biến. Tất cả các vấn đề là từ leetcode. com
Bao gồm các giải pháp bao gồm
- Report problems
- Mã Python với các nhận xét
- Mô tả chiến lược giải pháp
- Độ phức tạp về thời gian và không thời gian

Un request internet connection
Chuyển tiếp các giải pháp qua email

Xin vui lòng cho tôi ý kiến, chỉnh sửa và đề xuất của bạn
jake. mật mã. con trăn@gmail. com

Lần cập nhật gần đây nhất

Cấu trúc dữ liệu - giải thuật [CTDL-GT] đối với sinh viên học chuyên ngành CNTT là môn khó học. Với những người học CNTT trái ngành, khi các chương trình đào tạo đều dạy tập trung dùng framework để tạo ứng dụng, việc hiểu, dùng CTDL-GT tốt là điều xa tuyệt vời. Nhưng ngày càng có nhiều công ty ở VN phỏng vấn, lọc ứng viên bằng cách kiểm tra giải bài tập CTDL-GT. Bài viết này sẽ chia sẻ kinh nghiệm rèn luyện CTDL-GT trên nền tảng LeetCode

Tại sao chọn LeetCode?

Giải bài tập chương trình và chấm điểm tự động bằng máy tính đã rất phổ biến [tự động đánh giá lập trình trực tuyến]. Ở quốc tế, có LeetCode, Hackerank, CodeForce, Spoj. Ở VN có nhiều trang thi lập trình trực tuyến ví dụ CodeLearn. io và nhiều trang sử dụng mã nguồn mở DMOJ. Người Phán Xử Hiện Đại Online as https. // oj. vói. thông tin/

Tại sao tôi chọn LeetCode và khuyến khích các bạn bắt đầu với LeetCode?

  • Giao diện làm bài thi rất hay, giúp bạn tập trung vào giải quyết vấn đề chính thay vì phải đọc, xuất dữ liệu
  • Số lượng bài tập rất lớn được phân loại theo 3 cấp độ Dễ, Trung bình, Khó và đánh dấu theo chủ đề. Mảng, Bản đồ, Cây nhị phân, Lập trình động, Đệ quy, SQL…
  • Có cả nội dung ôn luyện từ rất dễ dàng để bạn không bị bỡ ngỡ bởi mức độ khó
  • Number of members very large > 2. 5 triệu người tham gia
  • Luyện theo chủ đề nhỏ, chuyên đề lớn, hoặc cho mục tiêu thi tuyển vào các công ty nổi tiếng
  • Có dịch vụ đặc quyền thu phí giúp bạn có trải nghiệm tốt hơn, không chỉ thi mà còn được học luôn qua mỗi bài tập
  • Phần trao đổi trong từng bài tập, blog chia sẻ kinh nghiệm rất bổ ích

LeetCode sử dụng tiếng Anh thuần túy. Nó vừa là nỗi khiếp sợ đối với nhiều người VN, nhưng khi đã làm quen thì nó giúp lập trình viên VN luyện kỹ năng đọc tiếng Anh rất tốt

Hướng kính, chăm chỉ

Bạn tập càng nhiều càng tốt và hãy thực hiện hàng ngày. Giải bài tập LeetCode trong một giờ mỗi ngày sẽ tốt hơn là chỉ làm trong bảy giờ vào Chủ nhật. Nếu bạn đang là sinh viên học tại Techmaster, thì mỗi ngày nên dành ra tối thiểu 2 tiếng để luyện LeetCode

Ví dụ đặt tiêu đề này, một năm có 365 ngày, 12 tháng hay 48 tuần. Năm ngày một tuần, mỗi ngày chúng ta giải 1. 5 bài LeetCode. Đây là mức độ gần như bạn sinh viên nào kể cả không học chuyên ngành CNTT cũng có thể làm được. Sau 1 năm chăm chỉ bạn sẽ được giải 12 tháng * 4 tuần * 5 ngày * 1. 5 bài = 360 bài

Hãy tự thưởng cho mình sau khi giải được một bài bằng cách xem Xếp hạng của bạn tăng đều mỗi ngày

Từ dễ đến khó

Nếu bạn đang ủ rũ ở một bài khó, hãy tạm dừng chuyển sang bài khác dễ hơn, tương tự hoặc đọc thêm tài liệu về nó, ví dụ các cách khác nhau để duyệt cây nhị phân chả hạn [Duyệt cây nhị phân]

Thay vì chọn những bài Medium, Hard ngay, tại sao không chọn làm thật nhiều bài ở mức độ Easy. Cảm giác giải được bài LeetCode đều đặn mỗi ngày sẽ giúp bạn phấn chấn tự tin hơn rất nhiều

Ví dụ tôi có kế hoạch là sau khi làm tất cả 200 bài cấp độ Dễ trước, sau đó mới bắt đầu làm 50 bài Trung bình, rồi mới đến các bài Khó

Luyện theo chủ đề

Nếu bạn đã định cấu hình được vị trí lập trình viên mà bạn sẽ ứng tuyển, hãy tập luyện các bài tập này
which position that normal or question. Ví dụ vị trí kỹ sư phần mềm thông thường sẽ có rất nhiều câu hỏi về cấu trúc dữ liệu và giải thuật. Bạn muốn tuyển dụng vị trí lập trình CSDL, hãy ưu tiên bộ đề SQL

  • Đầu tiên hãy đọc và giải thích hết các tập tin Nhập môn học đã nhập. Hướng dẫn cho người mới bắt đầu LeetCode
  • Sau đó đọc kỹ các thao tác mảng vì mảng xuất hiện ở rất nhiều bài Arrays 101
  • https. //leetcode. com/explore/learning/ link này có rất nhiều chủ đề. Bạn nên dành thời gian đọc kỹ để hiểu bản chất

Nhiều lời giải cho 1 bài

Trong một lớp sẽ có nhiều sinh viên cùng tham gia giải LeetCode. Một số bạn giải thật nhiều và thật nhanh để tăng hạng. Ngay tại thời điểm đó, có vẻ như họ vượt trội so với những người còn lại. Nhưng sau khi dừng giải LeetCode khoảng vài tháng, họ sẽ quên rất nhanh. Thay vì chạy theo thành tích, hãy cố gắng giải một bài bằng nhiều cách khác nhau, sử dụng các cấu trúc dữ liệu khác nhau [Array, List, HashMap], vòng lặp hoặc đệ quy, rồi so sánh tốc độ. Sau đó ghi chép quan sát thực tế

  • Cách nào dễ lập trình, mã gọn nhất?
  • Cách nào tốt nhất?
  • Phương pháp chung để tối ưu hóa tốc độ. không gọi 1 hàm lặp lại nhiều lần mà gán vào một biến, mảng cố định sẽ nhanh hơn ArrayList [mảng kích thước động], cần loại bỏ việc duyệt các trường hợp không cần thiết

Ví dụ với bài 2367. Số bộ ba số học
Bạn có thể sử dụng hai vòng lặp lồng nhau để xử lý, độ phức tạp là O[n^2]
Tốt hơn, có thể sử dụng HashMap

public int arithmeticTriplets[int[] nums, int diff] {
        HashMap map = new HashMap[];
        int count_triplet = 0;
        int two_diff = 2 * diff;
        for [int i = nums.length-1; i >= 0; i--] {
            int x = nums[i];
            map.put[x, i];
            if [map.get[x + diff] != null && map.get[x + two_diff] != null] {
                count_triplet++;
            }
        }
        return count_triplet;
}

Nhưng HashMap cũng hơi thừa khi chúng ta không cần {Key, Value} mà chỉ cần kiểm tra sự tồn tại của một số trong một tập tin, do đó hãy sử dụng HashSet HashSet set = new HashSet[];

public int arithmeticTriplets[int[] nums, int diff] {
        HashSet set = new HashSet[];
        int count_triplet = 0;
        int two_diff = 2 * diff;
        for [int i = nums.length-1; i >= 0; i--] {
            int x = nums[i];
            set.add[x];
            if [set.contains[x + diff] && set.contains[x + two_diff]] {
                count_triplet++;
            }
        }
        return count_triplet;
}

Tối ưu thêm chút nữa, đoạn vòng lặp sử dụng biến đếm cũng hơi phức tạp

 for [int i = nums.length-1; i >= 0; i--] {
   int x = nums[i];

Ta có thể thay thế bằng vòng duyệt phần tử

for [int x:nums] {
   set.add[x];

Học hỏi từ những người khác

Tôi không giỏi toán thế nên tôi luôn chọn cách làm đơn giản diễn giải mộc mạc theo cách nghĩ của tôi

  • Bước 1. run a loop
  • Bước 2. duyệt từng phần tử kiểm tra điều kiện, nếu đúng thì làm gì, thoát khi gặp điều kiện tới hạn
  • Bước X. return to results

Thường thì cách này chạy chậm, tôi cố gắng điều chỉnh mã một chút nữa

Nếu tốc độ dưới 60%, vậy với những lời giải thích khác của cộng đồng, mà vẫn không tìm ra cách tốt hơn, tôi sẽ vào phần Thảo luận để học hỏi. Đôi khi để hiểu một lời chúc tốt đẹp sẽ mất cả ngày đấy

Tạo một dự án chia thành các bài viết và trường hợp thử nghiệm

Nếu bạn không mua gói Premium Subscription, bạn không thể gỡ lỗi trong LeetCode. Đôi khi gặp phải một bài khó, bạn sẽ rất muốn chạy gỡ lỗi để tìm lỗi mà không muốn trả lại tiền. Do đó, hãy tạo một dự án chung, mỗi gói đóng gói từng bài vào một Lớp nếu bạn lập trình Java, C++, Python hoặc vào một chức năng nếu bạn lập trình Golang. Tiếp theo đó viết Unit Test để gọi từng hàm cụ thể để kiểm tra độc lập

Với Java, tôi sử dụng Gradle hoặc Maven để tạo một ứng dụng bảng điều khiển dự án theo kiểu như sau

Đây là mã để kiểm tra bài 1365. Có bao nhiêu số nhỏ hơn số hiện tại. Tôi sử dụng JUnit Jupiter và AssertJ để viết bài kiểm tra

package leetcode;

import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.*;

class Test1365 {
    @Test void method1[] {
        LeetCode1365 app = new LeetCode1365[];
        int[] nums = new int[]{8,1,2,2,3};
        var out = app.smallerNumbersThanCurrent2[nums];
        assertThat[out].containsExactly[new int[]{4,0,1,1,3}];

        nums = new int[]{6,5,4,8};
        out = app.smallerNumbersThanCurrent3[nums];
        assertThat[out].containsExactly[new int[]{2,1,0,3}];
    }
}

Ưu điểm của mã viết khi chạy thử ra bên ngoài giao diện LeetCode là chúng ta gỡ lỗi được, và xây dựng lại toàn bộ mã chạy được chứ không chỉ viết từng hàm để giải. Sẽ có nhiều lớp sau này có thể tận dụng vào dự án thật như Cây nhị phân… Code trên IDE chuyên nghiệp cũng giúp ta không xa rời thực tế quá tập trung vào 1 hàm vì thực tế là cả một dự án gồm nhiều lớp, bài kiểm tra . Ngoài ra, nếu cần có thể viết lệnh chạy Benchmark speed chính xác hơn so với kết quả chạy trên môi trường sử dụng chung của LeetCode

Viết blog chia sẻ lại kinh nghiệm bạn học được từ giải LeetCode

Bạn giải 10 bài LeetCode sau 10 tháng chắc bạn còn nhớ phương pháp giải. Nhưng nếu bạn mất thời gian ngồi tổng kết, viết lại bạn đã hình thành cách giải như thế nào, kinh nghiệm nào thu được khi giải LeetCode vào blog thì chắc chắn 10 năm nữa khi xem lại blog bạn sẽ nhớ ngay trong vòng 5 phút. Chưa kể sẽ có bao nhiêu người đọc được bài viết của bạn. Bạn sẽ thuộc về nhóm người chia sẻ, chứ không chỉ đơn thuần là giải LeetCode. Nên nhớ rằng LeetCode là nền tảng tự chấm lời giải lập trình có khoảng cách lớn hơn 2. 5 triệu thành viên

Có phải trả phí để mua LeetCode Premium?

LeetCode có dịch vụ cao cấp Premium, thuê bao hàng tháng là 35$ và cả năm là 159$. Dịch vụ cao cấp bao gồm các chức năng bổ sung, quyền lợi

  • Hướng dẫn giải bằng Video rất chi tiết từng bài
  • Xem được những bài mới lạ đặc quyền mới có
  • Xem được bộ bài thi mà các công ty đã từng ra hoặc tương tự khi phỏng vấn
  • Tốc độ thực thi mã nhanh hơn và luôn được ưu tiên. Ở gói miễn phí thì cùng một đoạn mã, tốc độ mỗi lần chạy rất nhiều hứng lung tung. Còn ở bản Premium có thể tăng tốc độ thi vừa nhanh và vừa đồng nhất
  • Có thể gỡ lỗi ngay trong giao diện LeetCode

Nếu bạn mới làm dưới 200 bài Easy thì tôi nghĩ chưa cần mua chiến. Khi nào bạn chuẩn bị thi Lập trình cạnh tranh, phỏng vấn ở các công ty lớn hoặc bạn quá bí khi giải thì có thể sử dụng LeetCode Premium. Cố gắng đừng lạm dụng việc xem lời giải, nếu nỗ lực tự giải quyết sau đó xem phần Thảo luận để học cách giải khác sẽ nhớ lâu hơn

Chuyển đổi nhanh giữa các ngôn ngữ lập trình nhờ LeetCode

Tôi gặp nhiều lập trình viên. Họ rất đắn đo khi phải chuyển sang một ngôn ngữ lập trình mới vì sợ thời gian học lâu và mã hiệu suất không được nhanh. Kinh nghiệm của tôi là

  • Kiếm một cheat sheet trực tuyến kiểu như thế này https. //lập trình-thành ngữ. org/cheatsheet/Java/Go
  • Cố gắng giải nén các bài LeetCode từ ngôn ngữ đang quen sang một ngôn ngữ cần mời học. Các thuật toán gần như giữ nguyên, chỉ cần phải điều chỉnh lại một số kiểu cấu trúc dữ liệu bị hủy bỏ
  • So sánh các ngôn ngữ khác nhau với một số tính năng cao cấp. OOP, Chung, Lambda, Không đồng bộ

Sau khi chuyển khoảng 30-60 bài trong 1-2 tuần, bạn sẽ thành thạo ngôn ngữ mới

Tài liệu bổ trợ khi luyện tập LeetCode

Tôi hay sử dụng Google với các kiểu từ khóa như “Java HashMap”, “Java Binary Tree Traversal”, “Binary Tree Full vs Complete”, “Java Dynamic Programming” để tìm kiếm thêm tài liệu

Các trang khác rất hữu ích như

  • https. //www. chuyên viên máy tính. tổ chức/
  • https. //lập trình-thành ngữ. tổ chức/cheatsheet
  • thuật toán trực quan
  • Khoá học Mastering Data Structures & Algorithms using C and C++

Khi nào thì ứng tuyển vào Samsung, Facebook, Google, Microsoft được?

Thuật toán là phần thi quan trọng của các tập đoàn lớn. Phần thi này sẽ loại bỏ nhanh nhất và tàn bạo nhất 80% ứng viên không đạt được yêu cầu tối thiểu. Còn lại 20% ứng viên sẽ phải kiểm tra, phỏng vấn nhiều kỹ năng khác như. thiết kế hệ thống, lý thuyết, kinh nghiệm làm dự án thật, các nguồn dự án mà bạn làm thêm

Nếu bạn là tác giả đóng góp tích cực một framework rất phổ biến hoặc xây dựng luôn có 1 ứng dụng chạy rất thú vị, thì bạn không cần phải chung sức với cả trăm công nghệ toán học trên LeetCode nữa. Ở trên anh khen LeetCode mà giờ lại nói thầy giải LeetCode nghe có vẻ mang em quá. Nhưng thực tế là vậy, kỹ năng giải LeetCode có thể rèn luyện nhờ sự cần thiết, làm đúng phương pháp trong vòng 12-36 tháng. Nhưng để tạo dự án mã nguồn mở trên Github có hàng giống như khó hơn nhiều

Chủ Đề