In dieser Frage erhalten wir ein Array arr[] der Größe N. Unsere Aufgabe besteht darin, den Index des linken Zeigers nach möglichen Bewegungen im Array zu finden.
Wir haben zwei Zeiger, einer ist der linke Zeiger und der andere ist der rechte Zeiger.
Der linke Zeiger beginnt bei Index 0 und erhöht seinen Wert.
Der rechte Zeiger beginnt beim Index (n-1) und der Wert nimmt ab.
Wenn die Summe der linken Zeiger kleiner ist als die Summe der rechten Zeiger, wird der Wert des Zeigers erhöht, andernfalls wird der Wert des Zeigers verringert. Und der Wert der Summe wird aktualisiert.
Lassen Sie uns dieses Problem anhand eines Beispiels verstehen. Die chinesische Übersetzung von
Input : arr[] = {5, 6, 3, 7, 9, 4} Output : 2
Erklärung −
lautet:Erklärung −
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.
Durch Verschieben des linken und rechten Zeigers entsprechend der Größe von die Summe zur Lösung des Problems. Überprüfen Sie dann, ob der linke Zeiger um 1 größer ist als der rechte Zeiger.
Programmbeispiel, das die Funktionsweise unserer Lösung veranschaulicht
#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; }
The index of left pointer after moving is 2
Das obige ist der detaillierte Inhalt vonSuchen Sie in C++ nach einer möglichen Verschiebung den Index des linken Zeigers in einem Array. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!