Step 4 of 5
รวม Coding patterns สำคัญสำหรับ LeetCode ได้แก่ Array+HashTable, Two Pointers, Sliding Window, BFS/DFS, Dynamic Programming และอื่น ๆ
Study the patterns, not individual problems — this is how you handle questions you've never seen.
เนื่องจากว่าตอนที่เราทำโจทย์ บางโจทย์เราสามารถที่จะ Apply pattern ต่าง ๆ ได้ ซึ่งต้องบอกว่า การรู้ pattern พวกนี้ ไม่ได้ทำให้เราแก้โจทย์ใน LeetCode ได้ทั้งหมด เพียงแต่จะทำให้เราเข้าใจ concept แต่ละโจทย์และประยุกต์ได้ง่ายมากขึ้น
HashMap ใน Java) มักจะเป็นโครงสร้างข้อมูลที่มีประสิทธิภาพมากที่สุด โดยให้ความซับซ้อนของเวลาเฉลี่ย O(1) สำหรับการค้นหา การแทรก และการลบข้อมูลstart และ end โดย end จะขยายหน้าต่าง และ start จะหดหน้าต่างStringBuilder จะมีประสิทธิภาพมากกว่าchar และคลาส Character คือเพื่อนของคุณsubstring(), indexOf(), charAt(), toCharArray(), split() ฯลฯ[a, b] และ [c, d] จะทับซ้อนกันถ้า a <= d และ c <= b[min(a, c), max(b, d)]i ควรอยู่ที่ index i - 1 ซึ่งทำได้แบบ in-place คือไม่ต้องใช้พื้นที่เพิ่มเติมPriorityQueue ใน Java)union() and find(): สองการดำเนินการหลักคือ union() ซึ่งรวมสองเซตย่อยเข้าด้วยกัน และ find() ซึ่งกำหนดว่าองค์ประกอบใดอยู่ในเซตย่อยใดdp[i][j] แทนค่าสูงสุดที่คุณจะได้รับด้วยไอเทม i ชิ้นแรกและกระเป๋าเป้ที่มีความจุ jdp[j] แทนค่าสูงสุดที่คุณจะได้รับด้วยกระเป๋าเป้ที่มีความจุ jdp[i][j] แทนความยาวของ longest palindromic subsequence ของ substring s[i...j]dp[i][i] = 1 สำหรับทุก ๆ idp[i][j] แทนความยาวของ longest common subsequence ของ i ตัวอักษรแรกของสตริง s1 และ j ตัวอักษรแรกของสตริง s2s1[i] == s2[j] แล้ว dp[i][j] = 1 + dp[i-1][j-1] มิฉะนั้น dp[i][j] = max(dp[i-1][j], dp[i][j-1])& (AND), | (OR), ^ (XOR), ~ (NOT), << (left shift), และ >> (right shift)n & (n - 1) == 0) หรือการสลับสองตัวเลขโดยไม่ใช้ตัวแปรชั่วคราว (a ^= b; b ^= a; a ^= b;)