Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

อัลกอริทึมรวมช่วงที่ซ้อนทับช่วงหลัก - JavaScript

ช่วงหลัก R1: [20, 40] ช่วงย่อย R2: [[14,22], [24,27], [31,35], [38,56]]

คำนวณความยาวส่วนที่ทับซ้อนของแต่ละช่วงใน R2 กับ R1 แล้วรวมกัน

ตัวอย่างโค้ด

const R1 = [20, 40];
const R2 = [[14,22], [24,27], [31,35], [38,56]];
const R3 = [120, 356];
const R4 = [[234, 567]];

function sumRanges(range, values) {
  const [start, end] = range;
  const res = values.reduce((acc, val) => {
    const [left, right] = val;
    const ex1 = Math.min(right, end);
    const ex2 = Math.max(left, start);
    const diff = ex1 - ex2;
    return acc + Math.max(0, diff);
  }, 0);
  return res;
}

console.log(sumRanges(R1, R2)); // 11
console.log(sumRanges(R3, R4)); // 122

ผลลัพธ์

11
122

คำอธิบาย: สำหรับแต่ละช่วง [left, right] ใน values: ช่วงทับซ้อนคือ [max(left, start), min(right, end)] ความยาว = min(right, end) - max(left, start) ถ้าติดลบ = 0 (ไม่ทับ) รวมทั้งหมดด้วย reduce