ในปัญหานี้ เราได้รับ array arr[] งานคือหาตำแหน่งของ left pointer หลังเลื่อนตามกฎ:
- Left pointer เริ่ม index 0, Right pointer เริ่ม index n-1
- Left sum = arr[0], Right sum = arr[n-1]
- ถ้า Left sum < Right sum → Left++ และบวก arr[left] เข้า left sum
- ถ้า Left sum > Right sum → Right-- และบวก arr[right] เข้า right sum
- ถ้าเท่ากัน → หยุด
- หยุดเมื่อ left >= right - 1
ตัวอย่าง
Input: arr[] = {5, 6, 3, 7, 9, 4} Output: 2
Steps: L=0(5) R=5(4)→R=4(13)→L=1(11)→L=2(14)→R=3(20)→Stop, L=2
ตัวอย่างโค้ด
#include <iostream>
using namespace std;
int findLeftPointerIndex(int arr[], int n) {
if (n == 1) return 0;
int left = 0, right = n - 1;
int leftSum = arr[0], rightSum = arr[n - 1];
while (right > left + 1) {
if (leftSum < rightSum) leftSum += arr[++left];
else if (leftSum > rightSum) rightSum += arr[--right];
else break;
}
return left;
}
int main() {
int arr[] = {5, 6, 3, 7, 9, 4};
cout << findLeftPointerIndex(arr, 6); // 2
return 0;
}
ผลลัพธ์
The index of left pointer after moving is 2