0Pricing
Competitive Programming Academy · บทเรียน

หาผลรวมช่วงใด ๆ ด้วยการลบ

ตอบ range[l..r] ได้ในเวลาคงที่

หาผลรวมช่วงใด ๆ ด้วยการลบ เป็นบทเรียน Competitive Programming Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Competitive Programming Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน

ประโยชน์ที่แท้จริง

การสร้างอาร์เรย์ผลรวมคำนำหน้าเป็นเพียงการเตรียมการ ต่อไปคือจุดสำคัญ: ตอบผลรวมของช่วงใด ๆ ด้วย การลบเพียงครั้งเดียว ⚡

แนวคิดหลัก

ผลรวมของช่วงคือผลรวมขนาดใหญ่หนึ่งค่าลบด้วยผลรวมขนาดเล็กอีกค่าหนึ่ง การ ลบค่าผลรวมคำนำหน้าสองค่าจะตัดทุกสิ่งที่อยู่นอกช่วงของคุณออกได้อย่างพอดี

สูตร

หากต้องการหาผลรวมของสมาชิกตั้งแต่ l ถึง r ให้ใช้ prefix[r + 1] ลบด้วย prefix[l] สูตรเดียวนี้ใช้ได้กับทุกช่วง

range_sum = prefix[r + 1] - prefix[l]

เหตุผลที่สูตรนี้ใช้ได้

prefix[r + 1] เก็บค่าทั้งหมดตั้งแต่ต้นจนถึง r ส่วน prefix[l] เก็บค่าทั้งหมดก่อนถึง l เมื่อหาผลต่างจึงเหลือเฉพาะส่วนตรงกลางพอดี

ตัวอย่างการคำนวณ

สำหรับ [3, 1, 4] ค่า prefix คือ [0, 3, 4, 8] หากต้องการหาผลรวมของดัชนี 1 ถึง 2 ให้คำนวณ 8 ลบ 3 ได้ 5 ซึ่งตรงกับ 1 บวกกับ 4

การสอบถามในเวลาคงที่

การสอบถามแต่ละครั้งมีเพียงการลบหนึ่งครั้ง จึงทำงานในเวลา O(1) การสอบถามหนึ่งพันครั้งใช้เวลาเท่ากันต่อครั้งกับการสอบถามเพียงครั้งเดียว

ระวังตำแหน่งคลาดไปหนึ่ง

ข้อผิดพลาดที่พบบ่อยที่สุดคือการใช้ดัชนีด้านบน หากมีเลขศูนย์นำหน้า คุณต้องใช้ prefix[r + 1] ไม่ใช่ prefix[r] ควรตรวจสอบขอบเขตนี้ให้ดี

รวมปลายช่วงกับไม่รวมปลายช่วง

ตัดสินใจตั้งแต่ต้นว่าให้รวม r หรือไม่ สูตรนี้ถือว่าช่วงรวมทั้ง l และ r ซึ่งเป็นรูปแบบที่โจทย์การแข่งขันส่วนใหญ่คาดหวัง

ห่อไว้ในฟังก์ชัน

ตัวช่วยขนาดเล็กทำให้ตรรกะอ่านง่ายและรวมการจัดการดัชนีไว้ในที่เดียว ให้ใช้ตัวช่วยนี้แทนการเขียนการคำนวณแทรกไว้โดยตรง

def query(l, r):
    return prefix[r + 1] - prefix[l]

จัดการทั้งอาร์เรย์

หากต้องการหาผลรวมของทั้งอาร์เรย์ ให้กำหนด l เท่ากับ 0 และ r เท่ากับ n ลบ 1 สูตรจะให้ค่า prefix[n] ซึ่งเป็นผลรวมทั้งหมด

จุดที่วิธีนี้โดดเด่น

เมื่อโจทย์มีคำถามผลรวมช่วงจำนวนมากบนอาร์เรย์คงที่ ผลรวมสะสมจะเปลี่ยนการวนลูป O(n) ต่อการสอบถามให้กลายเป็นคำตอบที่ได้ทันที

ตรวจสอบอย่างรวดเร็ว

คุณต้องการหาผลรวมของดัชนีตั้งแต่ l ถึง r โดยรวมปลายทั้งสองด้าน

สรุป

ตอนนี้คุณสามารถตอบการสอบถามผลรวมของช่วงใด ๆ ได้ในเวลา O(1) ด้วย prefix[r + 1] ลบด้วย prefix[l] ระวังออฟเซ็ตจากเลขศูนย์นำหน้า แล้วโค้ดของคุณจะไม่มีข้อผิดพลาด ✅

คำถามที่พบบ่อย

บทเรียน “หาผลรวมช่วงใด ๆ ด้วยการลบ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “หาผลรวมช่วงใด ๆ ด้วยการลบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Competitive Programming Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Competitive Programming Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “หาผลรวมช่วงใด ๆ ด้วยการลบ”

ตอบ range[l..r] ได้ในเวลาคงที่ คุณปฏิบัติ Competitive Programming Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Competitive Programming Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Competitive Programming Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “หาผลรวมช่วงใด ๆ ด้วยการลบ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Competitive Programming Academy นี้ได้ไหม

ได้ บทเรียน Competitive Programming Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. สร้างอาร์เรย์ผลรวมคำนำหน้า
  2. หาผลรวมช่วงใด ๆ ด้วยการลบ
  3. นับอาร์เรย์ย่อยที่มีผลรวมเป้าหมาย
  4. อาร์เรย์ผลต่างสำหรับการอัปเดตช่วง
← กลับไปที่ Competitive Programming Academy