ตัวชี้สองตัวบนอาร์เรย์ที่เรียงแล้ว
เลื่อนปลายทั้งสองเข้าหากันเพื่อพบเป้าหมาย
ตัวชี้สองตัวบนอาร์เรย์ที่เรียงแล้ว เป็นบทเรียน Competitive Programming Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Competitive Programming Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุผลที่ใช้ตัวชี้สองตัว
เทคนิค ตัวชี้สองตัว จะสแกนอาร์เรย์ด้วยดัชนีสองตัวแทนการใช้ลูปซ้อน ทำให้แนวคิด O(n^2) หลายแบบกลายเป็นการประมวลผล O(n) เพียงรอบเดียวที่เป็นระเบียบ 🎯
คำว่าเรียงลำดับแล้วคือหัวใจสำคัญ
รูปแบบคลาสสิกต้องใช้อาร์เรย์ที่ เรียงลำดับแล้ว การเรียงลำดับช่วยให้เหตุผลได้ว่า การเลื่อนไปทางขวาทำให้ค่ามากขึ้น ส่วนการเลื่อนไปทางซ้ายทำให้ค่าน้อยลง ดังนั้นแต่ละขั้นตอนจึงเป็นการตัดสินใจที่มีความหมาย
ตัวชี้สองตัวที่ปลายทั้งสองด้าน
เริ่มต้นตัวชี้หนึ่งตัวที่ ปลายด้านซ้าย และอีกตัวที่ปลายด้านขวา ตัวชี้ทั้งสองจะหันเข้าหากันและค่อย ๆ ลดระยะห่างระหว่างกัน
left = 0
right = len(a) - 1เลื่อนจากปลายเข้าด้านใน
ในแต่ละขั้นตอน ให้ เลื่อนตัวชี้เข้าด้านในเพียงหนึ่งตัว ลำดับของอาร์เรย์จะบอกว่าควรขยับด้านใดเพื่อเข้าใกล้เป้าหมายมากขึ้น
เงื่อนไขของลูป
วนซ้ำต่อไปตราบใดที่ left < right เมื่อทั้งสองตัวชี้มาบรรจบกันหรือข้ามกัน แสดงว่าได้ตรวจสอบคู่ที่มีประโยชน์ครบแล้ว และสามารถหยุดได้
while left < right:
# inspect a[left] and a[right]
passอ่านผลรวมปัจจุบัน
พิจารณา a[left] + a[right] เป็นค่าผู้สมัครปัจจุบัน การเปรียบเทียบค่านี้กับเป้าหมายจะบอกว่าขั้นถัดไปต้องการค่าที่มากขึ้นหรือน้อยลง
total = a[left] + a[right]น้อยเกินไป: เลื่อนด้านซ้าย
หากผลรวมต่ำกว่าเป้าหมาย คุณต้องการค่าที่ มากขึ้น ให้เลื่อนตัวชี้ด้านซ้ายไปทางขวาเพื่อไปยังค่าที่มากขึ้น เนื่องจากอาร์เรย์เรียงจากน้อยไปมาก
if total < target:
left += 1มากเกินไป: เลื่อนด้านขวา
หากผลรวมสูงกว่าเป้าหมาย คุณต้องการค่าที่ น้อยลง ให้เลื่อนตัวชี้ด้านขวาไปทางซ้ายเพื่อไปยังค่าที่น้อยลงและลดผลรวม
elif total > target:
right -= 1แต่ละขั้นตอนตัดงานทิ้ง
การเลื่อนแต่ละครั้งจะ ตัดทิ้งคู่ค่าจำนวนมากที่ไม่จำเป็นต้องตรวจสอบอีก นี่คือเหตุผลที่การสแกนใช้เวลาเชิงเส้นแทนเวลาเชิงกำลังสอง
เหตุผลที่วิธีนี้ถูกต้องเสมอ
คุณตัดทิ้งเฉพาะคู่ค่าที่ ไม่สามารถตรงกันได้เท่านั้น จึงไม่มีทางข้ามคำตอบที่ถูกต้อง ความปลอดภัยนี้ทำให้ตัวชี้สองตัวเป็นวิธีที่เชื่อถือได้ในการแข่งขัน
มากกว่าการดูที่ปลายอาร์เรย์
แนวคิดเดียวกันนี้ใช้กับ รูปแบบประยุกต์ เช่น การกลับลำดับภายในอาร์เรย์ การแบ่งส่วน และการผสาน เมื่อเข้าใจตัวชี้ที่เคลื่อนเข้าหากันแล้ว แนวคิดเหล่านี้จะคุ้นเคยขึ้นมาก
ตรวจสอบอย่างรวดเร็ว
คุณกำลังสแกนอาร์เรย์ที่เรียงลำดับแล้วจากปลายทั้งสองด้านเพื่อหาผลรวมเป้าหมาย
สรุปทบทวน
ตัวชี้สองตัวจะกวาดผ่านอาร์เรย์ที่ เรียงลำดับแล้วจากปลายทั้งสองด้าน โดยเลื่อนเข้าด้านในทีละตัวตราบใดที่ left < right ใช้เวลาเชิงเส้น ถูกต้อง และเป็นพื้นฐานของเทคนิคอีกมากมาย 🚀
คำถามที่พบบ่อย
บทเรียน “ตัวชี้สองตัวบนอาร์เรย์ที่เรียงแล้ว” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตัวชี้สองตัวบนอาร์เรย์ที่เรียงแล้ว” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Competitive Programming Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตัวชี้สองตัวบนอาร์เรย์ที่เรียงแล้ว”
เลื่อนปลายทั้งสองเข้าหากันเพื่อพบเป้าหมาย คุณปฏิบัติ Competitive Programming Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Competitive Programming Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Competitive Programming Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ตัวชี้สองตัวบนอาร์เรย์ที่เรียงแล้ว” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Competitive Programming Academy นี้ได้ไหม
ได้ บทเรียน Competitive Programming Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ตัวชี้สองตัวบนอาร์เรย์ที่เรียงแล้ว
- ค้นหาคู่ที่มีผลรวมกำหนด
- ลบค่าซ้ำในตำแหน่งเดิม
- ผสานลำดับที่เรียงแล้วสองชุด