ปัญหา
ได้รับอาร์เรย์ arr[] ขนาด n หา index ที่ผลรวมของสมาชิกก่อน index นั้น เท่ากับผลรวมของสมาชิกหลัง index นั้น
เงื่อนไข: sum(arr[0...e-1]) = sum(arr[e+1...n-1])
ตัวอย่าง
อินพุต: arr[] = {5, 1, 2, 8, 3, 4, 1}
เอาต์พุต: 3
คำอธิบาย: arr[0]+arr[1]+arr[2] = 5+1+2 = 8 = arr[4]+arr[5]+arr[6] = 3+4+1
แนวทางแก้ปัญหา
วิธีง่าย: ใช้ Nested Loops วนลูปตรวจสอบทุก index ว่าเป็น equilibrium index หรือไม่
โปรแกรมตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
int findEquilibriumIndex(int arr[], int n) {
for (int i = 0; i < n; ++i) {
int prevSum = 0, nextSum = 0;
for (int j = 0; j < i; j++) prevSum += arr[j];
for (int j = i + 1; j < n; j++) nextSum += arr[j];
if (prevSum == nextSum) return i;
}
return -1;
}
int main() {
int arr[] = {5, 1, 2, 8, 3, 4, 1};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "The equilibrium index is " << findEquilibriumIndex(arr, n);
return 0;
}
ผลลัพธ์
The equilibrium index is 3