Maison > développement back-end > C++ > En C++, retrouver l'index du pointeur gauche dans un tableau après un éventuel déplacement

En C++, retrouver l'index du pointeur gauche dans un tableau après un éventuel déplacement

WBOY
Libérer: 2023-09-09 13:09:02
avant
517 Les gens l'ont consulté

En C++, retrouver lindex du pointeur gauche dans un tableau après un éventuel déplacement

Dans cette question, on nous donne un tableau arr[] de taille N. Notre tâche est de trouver l'index du pointeur gauche après d'éventuels déplacements dans le tableau.

Nous avons deux pointeurs, l'un est le pointeur gauche et l'autre est le pointeur droit.

Le pointeur gauche commence à l'indice 0 et augmente en valeur.

Le pointeur droit part de l'index (n-1) et la valeur diminue.

Si la somme des pointeurs gauche est inférieure à la somme des pointeurs droits, la valeur du pointeur est augmentée, sinon la valeur du pointeur est diminuée. Et la valeur de la somme sera mise à jour.

Comprenons ce problème à travers un exemple, la traduction chinoise de

Input : arr[] = {5, 6, 3, 7, 9, 4}
Output : 2
Copier après la connexion

Explication

est :

Explication

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.
Copier après la connexion

Solution

En déplaçant les pointeurs gauche et droit en fonction de la taille de la somme pour résoudre le problème. Vérifiez ensuite si le pointeur gauche est supérieur de 1 au pointeur droit.

Exemple

Exemple de programme illustrant le fonctionnement de notre solution

#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;
}
Copier après la connexion

Sortie

The index of left pointer after moving is 2
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal