โจทย์: ลบองค์ประกอบของอาร์เรย์ในช่วงดัชนี L ถึง R (รวม L แต่ไม่รวม R หรือตามเงื่อนไขโค้ด)
แนวคิด: การเลื่อนองค์ประกอบ (Shift Elements)
ใช้ตัวแปร k เป็นดัชนีปลายทาง สำหรับแต่ละดัชนี i หากไม่อยู่ในช่วงที่จะลบ ให้คัดลอก arr[i] ไปที่ arr[k] และเพิ่ม k
ตัวอย่างโค้ด C++
#include <iostream>
using namespace std;
int main() {
int arr[] = { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 };
int L = 2, R = 6;
int length = sizeof(arr) / sizeof(arr[0]);
int k = 0;
for (int i = 0; i < length; i++) {
// เงื่อนไข: เก็บถ้า i <= L หรือ i >= R
if (i <= L || i >= R) {
arr[k] = arr[i];
k++;
}
}
length = k; // ความยาวใหม่
for (int i = 0; i < length; i++)
cout << arr[i] << " ";
return 0;
}
ผลลัพธ์
2 4 6 14 16 18 20
คำอธิบาย: ดัชนี 0,1,2 (ค่า 2,4,6) ถูกเก็บ ดัชนี 3,4,5 (ค่า 8,10,12) ถูกลบ ดัชนี 6,7,8,9 (ค่า 14,16,18,20) ถูกเก็บ หมายเหตุ: เงื่อนไข i <= L || i >= R หมายถึงลบดัชนี L+1 ถึง R-1 (ในที่นี้คือ 3,4,5)