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

ลบสมาชิกอาร์เรย์ในช่วงดัชนี [L, R] ใน C++

บทนำ

ลบสมาชิกในอาร์เรย์ตั้งแต่ดัชนี L ถึง R (inclusive) โดยเลื่อนสมาชิกที่เหลือมาบรรจุช่องว่าง

ขั้นตอนการแก้ปัญหา

  1. วนลูป i = 0 ถึง n-1
  2. ถ้า i ไม่อยู่ในช่วง [L, R] → คัดลอก arr[i] ไป arr[newIndex] แล้ว newIndex++
  3. คืนค่า newIndex เป็นขนาดใหม่

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

#include <bits/stdc++.h>
using namespace std;

int deleteElementsInRange(int arr[], int n, int l, int r) {
    int i, newIndex = 0;
    for (i = 0; i < n; i++) {
        if (i <= l || i >= r) {  // หมายเหตุ: เงื่อนไขนี้รวม L และ R ไว้ (เก็บ L และ R ไว้)
            arr[newIndex] = arr[i];
            newIndex++;
        }
    }
    return newIndex;
}

int main() {
    int n = 9, l = 1, r = 6;
    int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int updatedArrayLength = deleteElementsInRange(arr, n, l, r);
    for (int i = 0; i < updatedArrayLength; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
    return 0;
}

ผลลัพธ์

1 2 7 8 9

คำอธิบาย

L=1, R=6 → เก็บ index 0,1,6,7,8 (ค่า 1,2,7,8,9) ลบ index 2,3,4,5 (ค่า 3,4,5,6) หมายเหตุ: เงื่อนไข `i <= l || i >= r` ทำให้เก็บ L และ R ไว้ (ไม่ได้ลบ) หากต้องการลบช่วง [L,R] ทั้งหมด ควรเป็น `i < l || i > r`

สรุป

In-place array deletion O(n) time O(1) space ใช้ two-pointer technique (read/write index)