Dalam soalan ini, kita diberikan array arr[] bersaiz N. Tugas kami adalah untuk mencari indeks penunjuk kiri selepas kemungkinan bergerak dalam tatasusunan.
Kami mempunyai dua penunjuk, satu penunjuk kiri dan satu lagi penunjuk kanan.
Penunjuk kiri bermula pada indeks 0 dan nilai meningkat.
Penunjuk kanan bermula dari indeks (n-1) dan nilainya berkurangan.
Jika jumlah penunjuk kiri kurang daripada jumlah penunjuk kanan, nilai penunjuk akan dinaikkan, jika tidak nilai penunjuk akan berkurangan. Dan nilai jumlah akan dikemas kini.
Mari kita fahami masalah ini melalui contoh,
Input : arr[] = {5, 6, 3, 7, 9, 4} Output : 2
Penjelasan ∎🎜# ∎🎜# ∎ terjemahan Bahasa Cina ialah:
Penjelasan −
leftPointer = 0 -> sum = 5, rightPointer = 5 -> sum = 4. Move rightPointer leftPointer = 0 -> sum = 5, rightPointer = 4 -> sum = 13. Move leftPointer leftPointer = 1 -> sum = 11, rightPointer = 4 -> sum = 13. Move leftPointer leftPointer = 2 -> sum = 14, rightPointer = 4 -> sum = 13. Move rightPointer leftPointer = 2 -> sum = 14, rightPointer = 3 -> sum = 20. Move rightPointer Position of the left pointer is 2.
Contoh
#include <iostream> using namespace std; int findIndexLeftPointer(int arr[], int n) { if(n == 1) return 0; int leftPointer = 0,rightPointer = n-1,leftPointerSum = arr[0], rightPointerSum = arr[n-1]; while (rightPointer > leftPointer + 1) { if (leftPointerSum < rightPointerSum) { leftPointer++; leftPointerSum += arr[leftPointer]; } else if (leftPointerSum > rightPointerSum) { rightPointer--; rightPointerSum += arr[rightPointer]; } else { break; } } return leftPointer; } int main() { int arr[] = { 5, 6, 3, 7, 9, 4 }; int n = sizeof(arr) / sizeof(arr[0]); cout<<"The index of left pointer after moving is "<<findIndexLeftPointer(arr, n); return 0; }
Output
The index of left pointer after moving is 2
Atas ialah kandungan terperinci Dalam C++, cari indeks penunjuk kiri dalam tatasusunan selepas kemungkinan langkah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!