Heim > Backend-Entwicklung > C++ > Suchen Sie in C++ nach einer möglichen Verschiebung den Index des linken Zeigers in einem Array

Suchen Sie in C++ nach einer möglichen Verschiebung den Index des linken Zeigers in einem Array

WBOY
Freigeben: 2023-09-09 13:09:02
nach vorne
504 Leute haben es durchsucht

Suchen Sie in C++ nach einer möglichen Verschiebung den Index des linken Zeigers in einem Array

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
Nach dem Login kopieren

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.
Nach dem Login kopieren

Lösung

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.

Beispiel

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;
}
Nach dem Login kopieren

Ausgabe

The index of left pointer after moving is 2
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage