Tag: algorithms
68 รายการ
Blog

LeetCode #57 Insert Interval: หมี มด เหยี่ยว แข่งแทรกช่วงเวลา
แทรกช่วงเวลาแล้วรวมส่วนที่ทับกันด้วย Python 3 วิธี ผ่านวงโต้วาทีของหมี มด และเหยี่ยว พร้อมเทสต์และ benchmark ที่รันจริง

LeetCode #205 Isomorphic Strings: วาฬ แมว ลิง นกแก้ว ประชันสมุดแปลงอักษร
เข้าใจสตริงที่มีรูปแบบเดียวกันผ่านสัตว์การ์ตูน 4 วิธี พร้อมโค้ด 5 แบบ เทสต์ และ benchmark ที่รันจริงบนเครื่องนี้

LeetCode #242 Valid Anagram: ช้าง กระรอก ผึ้ง นกฮูก ใครนับแม่นสุด
ตรวจคำสลับอักษรด้วย Python 4 วิธี ผ่านวงถกของสัตว์นักนับ พร้อมเทสต์และ benchmark ที่รันจริงบนเครื่องนี้

LeetCode #973 K Closest Points to Origin: หมี เพนกวิน จิ้งจอก ลิง ชิงจุดใกล้สุด
หาจุดใกล้จุดกำเนิดด้วย Python 4 วิธี ตั้งแต่ sort ถึง quickselect พร้อมเทสต์และ benchmark ที่รันจริง

LeetCode #35 Search Insert Position: เต่า เหยี่ยว แมว ชิงตำแหน่งเสียบเลข
เทียบ 3 วิธีหาตำแหน่งแทรกในลิสต์เรียงแล้ว ตั้งแต่เดินทีละช่องถึง binary search และ bisect พร้อมเทสต์และ benchmark ที่รันจริง

LeetCode #88 Merge Sorted Array: ช้าง กระต่าย นกฮูก ประลองรวมคิว
รวมอาร์เรย์ที่เรียงแล้วด้วย 3 วิธี ผ่านวงถกของช้าง กระต่าย และนกฮูก พร้อมเทสต์และ benchmark ที่รันจริงใน Python

LeetCode #48 Rotate Image: ยีราฟ จิ้งจอก เพนกวิน มดงาน หมุนรูป 90 องศาให้ไม่เบี้ยว
หมุนเมทริกซ์ n×n ตามเข็มนาฬิกา 90 องศา 4 วิธี ตั้งแต่สร้างตารางใหม่จนถึงสลับทีละชั้นแบบ in-place พร้อม benchmark ที่รันจริงสองขนาด

LeetCode #136 Single Number: ผึ้ง เป็ด กระต่าย แพนด้า หาเลขโสดตัวเดียวในฝูงคู่
หาเลขที่ไม่มีคู่ในลิสต์ที่ทุกตัวอื่นซ้ำสองครั้ง 4 วิธี ตั้งแต่นับด้วย dict จนถึง XOR ที่ไม่ใช้ที่เพิ่ม พร้อม benchmark จริงและตารางเลือกใช้

LeetCode #189 Rotate Array: เต่า ช้าง แมว นกฮูก กระรอก ใครหมุนอาร์เรย์เก่งสุด
หมุนอาร์เรย์ไปทางขวา k ช่อง 5 วิธีที่ต่างกันจริง เทียบเวลาและหน่วยความจำ พร้อม benchmark ที่รันบนเครื่องนี้ และตารางเลือกวิธีตามสถานการณ์

LeetCode #438 Find All Anagrams: หน้าต่างเลื่อนชนะการ sort ทุกช่อง
แมวขี้เกียจกับนากนับตัวอักษรเถียงกันเรื่องหา anagram ทุกตำแหน่ง พร้อม benchmark จริง

LeetCode #239 Sliding Window Maximum: คิวสองหัวชนะการหา max ทุกหน้าต่าง
หมีขี้เกียจ นากคิว และนกฮูกกองโต เถียงกันเรื่องหาค่ามากสุดในทุกหน้าต่างขนาด k พร้อม benchmark จริง

LeetCode #424 Longest Repeating Character Replacement: หน้าต่างเลื่อน vs ไล่ทุกช่วง
กบขี้เกียจ นากขยัน และนกฮูกแผนที่ เถียงกันเรื่องเปลี่ยนตัวอักษรได้ k ครั้งให้ช่วงยาวสุด พร้อม benchmark จริงบนเครื่องนี้
LeetCode #394 Decode String: แกะวงเล็บซ้อนด้วย stack
เทียบ 3 วิธีถอดข้อความ k[encoded] พร้อม parser, stack, Python, Java, complexity และ decision table
LeetCode #73 Set Matrix Zeroes: ใช้แถวแรกเป็นสมุดจด
เทียบ 3 วิธีทำแถวและคอลัมน์ให้เป็นศูนย์ พร้อมวิธี O(1), Python, Java, edge cases และ decision table
LeetCode #2 Add Two Numbers: บวก linked list ด้วย carry ทีละหลัก
เทียบ 3 วิธีบวกเลขที่เก็บกลับหลักใน linked list พร้อม Python, Java, complexity, edge cases และ decision table

LeetCode #283 Move Zeroes: 5 สัตว์เถียงกันว่าใครย้ายลังเปล่าได้เร็วสุด
ลบแล้วต่อท้าย, สร้าง list ใหม่, sort ด้วย key, สองตัวชี้สลับ และเขียนทับแล้วเติม 0 มาเถียงกันในโจทย์ย้ายเลขศูนย์ไปท้าย พร้อม test และ benchmark ที่วัดจริง

LeetCode #268 Missing Number: 5 วิธีเถียงกันว่าใครเร็วสุด แล้วให้ benchmark ตัดสิน
ไล่ทีละตัว, sort, set, สูตรผลบวก และ XOR มาเถียงกันในโจทย์หาเลขที่หายไป พร้อม test และผล benchmark ที่วัดจริง
Python bisect กับ key: แทรก record ลงลิสต์เรียงโดยไม่สร้าง key list ใหม่
ใช้ bisect_left และ insort_right กับ key function ให้ถูก โดยแยกค่าที่ค้นจาก record ที่แทรก พร้อม trade-off ของ O(log n) search กับ O(n) insertion
LeetCode #417 Pacific Atlantic: เดินน้ำย้อนจากสองมหาสมุทร
เทียบ brute force, reverse DFS/BFS และ bitmask frontier พร้อม decision table และ Python tests
LeetCode #230 Kth Smallest in BST: หยุด inorder เมื่อถึงลำดับ
เทียบ inorder ทั้งชุด, iterative early-stop และ subtree size พร้อม decision table และ tests
LeetCode #139 Word Break: ต่อคำให้เต็มสตริงโดยไม่หลงทางซ้ำ
เทียบ DP, memoized DFS, BFS และ trie พร้อม decision table และ Python unittest ที่รันจริง
LeetCode #208 Implement Trie: ต้นไม้คำนำหน้าสำหรับค้นเร็ว
เทียบโหนด+dict, อาเรย์ 26 ช่อง และเซ็ตคำแบบช้า พร้อมเลือกใช้ตามสถานการณ์
LeetCode #46 Permutations: สลับให้ครบทุกแถวโดยไม่ซ้ำตำแหน่ง
เทียบ backtracking+used, swap in-place และ itertools พร้อม tradeoff
LeetCode #22 Generate Parentheses: เปิด-ปิดให้ถูกทุกแบบ
เทียบ backtracking นับเปิด/ปิด, brute+validate และ DP แบบ Catalan พร้อม decision table
LeetCode #39 Combination Sum: เลือกซ้ำได้ แต่ห้ามสร้างคำตอบซ้ำ
เทียบ include-skip, sorted backtracking และ bottom-up DP พร้อม pruning และ decision table
LeetCode #23 Merge k Sorted Lists: เลือกหัวที่เล็กสุดโดยไม่ sort ทั้งกอง
เทียบ collect-sort, merge ทีละลิสต์, heap และ divide-and-conquer พร้อม decision table
LeetCode #19 Remove Nth Node From End: เว้นระยะให้ pointer นำทาง
เทียบสองรอบ, two pointers และ stack พร้อม complexity, edge cases และ decision table
LeetCode #169 Majority Element: นับ จัดเรียง หรือหักคะแนนเสียง
เทียบ Counter, sorting และ Boyer–Moore พร้อมเงื่อนไข majority ที่ต้องมีจริง
LeetCode #739 Daily Temperatures: รอวันอุ่นขึ้นด้วย stack หรือมองอุณหภูมิที่เป็นไปได้
เทียบ brute force, monotonic stack และช่วงอุณหภูมิจำกัด พร้อมตารางเลือกวิธีและ Python tests
Python 3.14: heapq มี heapify_max / heappush_max — เลิกกลับเครื่องหมายเอง
สรุปตัวช่วย max-heap ใหม่ใน heapq 3.14 — heapify_max, heappush_max, heappop_max, heapreplace_max, heappushpop_max
LeetCode #125 Valid Palindrome: กรองก่อนหรือเดินสองด้าน แบบไหนเหมาะกว่า
เทียบ normalize-and-reverse, two pointers และ deque สำหรับตรวจ palindrome พร้อม complexity, Unicode caveat และ unittest
LeetCode #76 Minimum Window Substring: Sliding Window ที่นับ Duplicate ถูก
เทียบ brute force กับ sliding window พร้อม invariant ของ formed/required, complexity, edge cases และ unittest
LeetCode #5 Longest Palindromic Substring: ขยายจากกลาง, DP หรือ Manacher
เทียบสามวิธีหาพาลินโดรมยาวสุด พร้อม complexity, edge cases, decision table และ unittest ที่รันจริง
LeetCode #128 Longest Consecutive Sequence: เริ่มนับเฉพาะหัวแถว
เทียบ sort กับ hash set สำหรับลำดับจำนวนเต็มต่อเนื่อง พร้อม complexity, duplicate edge cases และ unittest
LeetCode #207 Course Schedule: ตรวจวงจรด้วย Kahn BFS หรือ DFS สีสามสถานะ
เทียบ topological sort สองแบบ พร้อม complexity, graph edge cases, decision table และ unittest
LeetCode #75 Sort Colors: Counting เทียบ Dutch National Flag แบบเขียนทับในที่เดิม
เทียบ 3 วิธีเรียง 0,1,2 พร้อม invariant, mutation tradeoff, decision table และ unittest
LeetCode #78 Subsets: ขยายคำตอบ, backtracking หรือ bitmask เลือกแบบไหนดี
เทียบ 3 วิธีสร้าง power set พร้อม complexity, edge cases, decision table และ unittest ที่รันจริง
Java Collectors.partitioningBy: แบ่ง Stream เป็นสองฝั่งด้วย predicate เดียว
ใช้ partitioningBy เมื่อต้องการทั้งกลุ่ม true และ false พร้อมเทียบกับ filter สองรอบ

LeetCode #543 Diameter of Binary Tree: เส้นทางยาวสุดผ่านโหนดใดก็ได้
อธิบายเส้นผ่านศูนย์กลางของต้นไม้ทวิภาคด้วย DFS เก็บ best พร้อมแนวอื่นและ unittest

LeetCode #226 Invert Binary Tree: สลับลูกซ้าย-ขวาแบบ recursive / BFS
เทียบสี่แนวทางพลิกต้นไม้ทวิภาค พร้อมความซับซ้อนและ unittest

LeetCode #146 LRU Cache: HashMap + Doubly Linked List คุมความเร็ว O(1)
เทียบแนวลิสต์ธรรมดา OrderedDict และ HashMap+DLL สำหรับ LRU พร้อมเลือกวิธีตามสถานการณ์และ unittest

itertools.pairwise: เดินคู่ติดกันในลำดับโดยไม่เขียน zip เอง
อธิบาย pairwise ตั้งแต่ Python 3.10 เทียบกับ zip(seq, seq[1:]) พร้อม unittest
LeetCode 155: Min Stack เก็บค่าต่ำสุดอย่างไรให้ทุกคำสั่ง O(1)
เทียบ scan, dual stack, pair stack และ encoded difference พร้อม edge cases, decision table และ self-contained tests
LeetCode 98: ตรวจ BST ด้วย Bound หรือ Inorder แบบไหนชัดกว่า
เทียบ recursive bounds, iterative inorder และเก็บลำดับก่อนตรวจ พร้อม complexity, decision table และ test กรณี node ผิดข้าม subtree
LeetCode 33: ค้นหาใน Array ที่หมุนแล้ว เลือก Linear หรือ Binary ดี
เทียบ 3 วิธีตั้งแต่สแกนตรง, หา pivot แล้ว binary search และ one-pass binary พร้อมตารางตัดสินใจและ test ครบ edge case

LeetCode #42 Trapping Rain Water: น้ำขังระหว่างแท่งความสูง
เทียบ two pointers, prefix/suffix max และโมโนโทนิกสแต็ก พร้อมเทสต์ python และตารางเลือกใช้

LeetCode #347 Top K Frequent Elements: กองหรือถังนับความถี่
เทียบ Counter+heap, bucket sort ตามความถี่ และ sorting พร้อมเทสต์ python และตารางเลือกใช้

LeetCode #49 Group Anagrams: จัดกลุ่มคำที่ตัวอักษรเหมือนกัน
เทียบ sorted-key, count-tuple key และคู่มือเลือกใช้ พร้อมเทสต์ python รันได้
LeetCode 102 Level Order Traversal: เลือก queue, index หรือ DFS
เทียบ BFS ด้วย deque, list พร้อม head index และ DFS สะสมตาม depth พร้อม trade-off ด้าน width recursion และ readability
LeetCode 11 Container With Most Water: ทำไมต้องขยับฝั่งเตี้ย
เทียบ brute force, suffix maximum และ two pointers พร้อมพิสูจน์การตัดตัวเลือกและเลือกวิธีตาม memory
LeetCode 217 Contains Duplicate: เลือก set, sort หรือ brute force
เทียบสามวิธีตรวจค่าซ้ำด้วยเวลา memory การแก้ input และ streaming พร้อม unittest ครบ edge cases
Python bisect key=: ค้นช่วงในข้อมูลเรียงโดยไม่เรียก key ซ้ำเกินจำเป็น
ใช้ bisect_left กับ key อย่างถูกชนิด และเลือก precomputed keys หรือ cache เมื่อต้องค้นซ้ำบนข้อมูลเดิม

LeetCode #322 Coin Change: แลกเหรียญให้น้อยสุดด้วย DP
เทียบ greedy, BFS ตามจำนวนเหรียญ และ bottom-up DP พร้อมเคสแลกไม่ได้และเหรียญซ้ำค่า

LeetCode #70 Climbing Stairs: ก้าว 1 หรือ 2 แล้วจำผลย่อย
เทียบ recursion, memo, bottom-up DP และสูตรปิด พร้อม tradeoff และเคสบันไดสั้น

LeetCode #15 3Sum: หาสามตัวที่บวกกันได้ศูนย์โดยไม่ซ้ำชุด
เทียบ brute force, hash pair และ sort + two pointers พร้อม tradeoff เวลา/หน่วยความจำและเคสเลขซ้ำ
LeetCode #200 Number of Islands: Flood Fill, BFS หรือ Union-Find เลือกตามข้อจำกัด
เทียบสามวิธีนับเกาะ พร้อม complexity, edge cases, mutation trade-off และ tests ที่รันจริง
LeetCode #141 Linked List Cycle: เต่ากับกระต่ายพิสูจน์วงโดยไม่ใช้แรมเพิ่ม
เทียบ hash set กับ Floyd cycle detection พร้อม proof intuition, complexity, edge cases และ decision table
LeetCode #21 Merge Two Sorted Lists: เลือกโหนดเล็กแล้วต่อหาง
เทียบ iterative reuse, recursion และสร้างลิสต์ใหม่ พร้อม complexity, edge cases และ decision table
Python TopologicalSorter: เรียงงานจาก dependency และจับวงจรก่อนเริ่ม
สร้างแผนงานจากกราฟ predecessor พร้อม unittest สำหรับลำดับถูกต้อง งานอิสระ และ cycle

LeetCode #3 Longest Substring Without Repeating Characters: หน้าต่างเลื่อน
เทียบ brute force, set ขยาย/หด, และดัชนีล่าสุดของตัวอักษร พร้อมตารางเลือกวิธีและ unittest

LeetCode #238 Product of Array Except Self: คูณซ้ายขวาโดยไม่ใช้หาร
เทียบคูณตรงๆ แบบมีหาร, prefix/suffix อาร์เรย์, และอัปเดตจากขวาในที่เดียว พร้อม unittest

LeetCode #206 Reverse Linked List: พลิกพอยน์เตอร์ให้ชัวร์
เทียบวนซ้ำเก็บ prev, รีเคอร์ซีฟ, และใช้สแต็กช่วย พร้อม edge case ลิสต์ว่างและ unittest
LeetCode #704 Binary Search: บีบช่วงค้นหาโดยไม่หลุดขอบ
เทียบ linear, iterative, recursive และ bisect พร้อม invariant, edge cases และ Python unittest
LeetCode #53 Maximum Subarray: Kadane จากคำถามว่าจะต่อหรือเริ่มใหม่
เทียบ brute force, prefix minimum, Kadane และ divide-and-conquer พร้อมเคสเลขลบล้วนและ unittest
LeetCode #121 Best Time to Buy and Sell Stock: จำราคาต่ำสุดครั้งเดียว
เทียบสี่วิธีแก้โจทย์หุ้นหนึ่งธุรกรรม ตั้งแต่ลองทุกคู่ถึง one-pass พร้อม complexity และ unittest

LeetCode Valid Parentheses: สแต็กกับการจับคู่เครื่องหมาย
ติว Valid Parentheses หลายแนวทาง เทียบความชัดและประสิทธิภาพ แล้วแนะนำชุดที่เหมาะสัมภาษณ์กับโปรดักชัน

LeetCode Two Sum: ห้าแนวคิดจากช้าสุดถึงแผนที่หนึ่งรอบ
อธิบาย Two Sum แบบเพื่อนติว สองถึงห้าแนวทาง เทียบเวลาพื้นที่และความชัด แล้วแนะนำว่าจะใช้ตอนไวท์บอร์ด โปรดักชัน หรือมือใหม่

LeetCode Merge Intervals: เรียงก่อนแล้วค่อยยุบช่วงซ้อน
อธิบาย Merge Intervals หลายแนวทาง เทียบความชัดเวลาและพื้นที่ พร้อมคำแนะนำสำหรับสัมภาษณ์และงานจริง