บทนำ
ลบสมาชิกในอาร์เรย์ตั้งแต่ดัชนี L ถึง R (inclusive) โดยเลื่อนสมาชิกที่เหลือมาบรรจุช่องว่าง
ขั้นตอนการแก้ปัญหา
- วนลูป i = 0 ถึง n-1
- ถ้า i ไม่อยู่ในช่วง [L, R] → คัดลอก arr[i] ไป arr[newIndex] แล้ว newIndex++
- คืนค่า 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)