หาผลรวมช่วงใด ๆ ด้วยการลบ
ตอบ range[l..r] ได้ในเวลาคงที่
หาผลรวมช่วงใด ๆ ด้วยการลบ เป็นบทเรียน Coding Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Coding Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 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) และปลดล็อคส่วนที่เหลือของคอร์ส Coding Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “หาผลรวมช่วงใด ๆ ด้วยการลบ”
ตอบ range[l..r] ได้ในเวลาคงที่ คุณปฏิบัติ Coding Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Coding Interview Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Coding Interview Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “หาผลรวมช่วงใด ๆ ด้วยการลบ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Coding Interview Prep นี้ได้ไหม
ได้ บทเรียน Coding Interview Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สร้างอาร์เรย์ผลรวมคำนำหน้า
- หาผลรวมช่วงใด ๆ ด้วยการลบ
- นับอาร์เรย์ย่อยที่มีผลรวมเป้าหมาย
- อาร์เรย์ผลต่างสำหรับการอัปเดตช่วง