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
WBOYnach vorne
2023-09-09 13:09:02508Durchsuche

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

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.

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;
}

Ausgabe

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen