อาร์เรย์ผลต่างสำหรับการอัปเดตช่วง
ใช้การดำเนินการเพิ่มค่าในช่วงจำนวนมากอย่างรวดเร็ว
อาร์เรย์ผลต่างสำหรับการอัปเดตช่วง เป็นบทเรียน Coding Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Coding Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
พลิกมุมมองของโจทย์
ผลรวมสะสมช่วยตอบการสอบถามช่วงได้อย่างรวดเร็ว ส่วนอาร์เรย์ผลต่างจะพลิกแนวคิดนี้เพื่อใช้การอัปเดตหลายช่วงได้อย่างรวดเร็ว 🔁
วิธีที่ช้า
การเพิ่มค่าให้สมาชิกทุกตัวในช่วงหนึ่งซ้ำหลายครั้งใช้เวลา O(n) ต่อการอัปเดต เมื่อมีการอัปเดต q ครั้งต้นทุนรวมจะเพิ่มขึ้นอย่างมาก
เก็บเฉพาะการเปลี่ยนแปลง
แทนที่จะแก้ไขทุกช่อง ให้บันทึกเฉพาะตำแหน่งที่การเปลี่ยนแปลงเริ่มต้นและตำแหน่งที่สิ้นสุด ให้ทำเครื่องหมายที่ขอบ ไม่ใช่ตรงกลาง
อาร์เรย์ผลต่างเก็บอะไรไว้
อาร์เรย์ผลต่างเก็บระยะห่างระหว่างสมาชิกแต่ละตัวกับสมาชิกที่อยู่ก่อนหน้า การแก้ไขระยะห่างเพียงค่าเดียวจะเลื่อนค่าของช่วงทั้งหมดที่อยู่ถัดไป
เคล็ดลับการทำเครื่องหมายสองจุด
หากต้องการเพิ่ม v ตั้งแต่ l ถึง r ให้เพิ่ม v ที่ดัชนี l และลบ v ที่ดัชนี r + 1 การแก้ไขเพียงสองครั้งครอบคลุมทั้งช่วง
diff[l] += v
diff[r + 1] -= vเหตุใดจึงต้องลบ
เครื่องหมายบวกที่ l จะเปิดใช้การเปลี่ยนแปลง ส่วนเครื่องหมายลบที่ r + 1 จะปิดการเปลี่ยนแปลงนั้น ทั้งสองอย่างร่วมกันจำกัดการอัปเดตให้อยู่ในช่วงเดียว
ใช้การอัปเดตทั้งหมดอย่างประหยัด
การอัปเดตแต่ละครั้งมีเพียงการเขียนลงอาร์เรย์สองครั้ง ดังนั้นการอัปเดต q ครั้งใช้เวลาทั้งหมด O(q) ส่วนงานหนักจะเลื่อนไปทำตอนท้าย
สร้างอาร์เรย์สุดท้ายกลับคืน
หลังจากทำเครื่องหมายทั้งหมดแล้ว ให้หาผลรวมสะสมของอาร์เรย์ผลต่าง การวนผ่านเพียงครั้งเดียวนี้จะสร้างค่าท้ายสุดของทุกตำแหน่งกลับคืนมา
for i in range(1, n):
diff[i] += diff[i - 1]เผื่อขนาดด้วยช่องป้องกัน
สร้างอาร์เรย์ให้ยาวขึ้นอีกหนึ่งช่อง เพื่อให้ r + 1 ไม่เกินขอบเขต ช่องป้องกันพิเศษนี้ช่วยหลีกเลี่ยงข้อผิดพลาดของดัชนี
ต้นทุนรวม
คุณใช้เวลา O(q) ทำเครื่องหมายการอัปเดต และใช้เวลา O(n) อีกหนึ่งรอบเพื่อสร้างอาร์เรย์กลับคืนมาต้นทุนรวมจึงต่ำกว่าวิธีตรงไปตรงมา O(n คูณ q) มาก
จุดที่วิธีนี้ได้เปรียบ
อาร์เรย์ผลต่างเหมาะอย่างยิ่งกับการนับการจอง ค่าผ่านทางบนถนน และโจทย์ใด ๆ ที่มีการดำเนินการเพิ่มค่าตลอดช่วงจำนวนมากแล้วอ่านผลเพียงครั้งเดียว
ตรวจสอบอย่างรวดเร็ว
คุณเพิ่ม v ให้สมาชิกทุกตัวตั้งแต่ดัชนี l ถึง r
สรุป
คุณสามารถรวมการอัปเดตช่วงหลายครั้งด้วยอาร์เรย์ผลต่าง: ทำเครื่องหมายที่ l และ r + 1 จากนั้นหาผลรวมสะสมเพียงครั้งเดียวเพื่อสร้างอาร์เรย์กลับคืนมา อัปเดตได้รวดเร็ว อ่านผลครั้งเดียว ✅
คำถามที่พบบ่อย
บทเรียน “อาร์เรย์ผลต่างสำหรับการอัปเดตช่วง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “อาร์เรย์ผลต่างสำหรับการอัปเดตช่วง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Coding Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “อาร์เรย์ผลต่างสำหรับการอัปเดตช่วง”
ใช้การดำเนินการเพิ่มค่าในช่วงจำนวนมากอย่างรวดเร็ว คุณปฏิบัติ Coding Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Coding Interview Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Coding Interview Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “อาร์เรย์ผลต่างสำหรับการอัปเดตช่วง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Coding Interview Prep นี้ได้ไหม
ได้ บทเรียน Coding Interview Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สร้างอาร์เรย์ผลรวมคำนำหน้า
- หาผลรวมช่วงใด ๆ ด้วยการลบ
- นับอาร์เรย์ย่อยที่มีผลรวมเป้าหมาย
- อาร์เรย์ผลต่างสำหรับการอัปเดตช่วง