Heim > Backend-Entwicklung > C++ > Maximieren Sie in C++ die Summe eines Arrays, indem Sie sein Präfix mit -1 multiplizieren

Maximieren Sie in C++ die Summe eines Arrays, indem Sie sein Präfix mit -1 multiplizieren

WBOY
Freigeben: 2023-09-08 15:17:02
nach vorne
753 Leute haben es durchsucht

Maximieren Sie in C++ die Summe eines Arrays, indem Sie sein Präfix mit -1 multiplizieren

Wir haben ein Array von Ganzzahlen und die Aufgabe besteht darin, zuerst das Präfix des Arrays zu ermitteln und es dann mit -1 zu multiplizieren, zweitens die Summe der Präfixe des Arrays zu berechnen und schließlich die maximale Summe im generierten Präfix zu finden Array.

Das Präfix-Array wird wie folgt generiert:

Das erste Element des Präfix-Arrays prefixArray[0] = das erste Element des Arrays

Das zweite Element des Präfix-Arrays prefixArray[1] = prefixArray[0] + arr [1]

Das dritte Element des Präfix-Arrays prefixArray[2] = prefixArray[1] + arr[2]

Das vierte Element des Präfix-Arrays prefixArray[3] = prefixArray[2] + arr[3] . ..etc. warte.

Sehen wir uns die verschiedenen Eingabe- und Ausgabesituationen dieses Problems an -

Für int arr[] = {2, 4, 1, 5, 2}

Das Ausgabe--Präfix-Array lautet: -2 2 3 8 10 Maximieren Sie die Summe eines Arrays, indem Sie sein Präfix mit -1 multiplizieren: 21

Erklärung – Wir haben ein Array von ganzen Zahlen. Zuerst erhalten wir das Präfix des Arrays, das 2 ist, und multiplizieren es mit -1. Das neue Array ist also {-2, 4, 1, 5, 2}. Nun bilden wir die maximale Summe des Präfix-Arrays.

Das Präfix-Array ist {-2, 2, 3, 8, 10}. Der letzte Schritt besteht darin, die Summe auf -2+2+3+8+`0 = 21 zu maximieren, was der endgültigen Ausgabe entspricht.

In - int arr[] = {-1, 4, 2, 1, -9, 6};

Das ausgegebene - Präfix-Array lautet: 1 5 7 8 -1 5 Durch Kombinieren des Präfixes von Das Array mit Multipliziert mit -1 beträgt die Summe der maximierten Arrays: 19

Erklärung- Wir haben ein Array von ganzen Zahlen. Zuerst nehmen wir das Präfix des Arrays -1 und multiplizieren es mit -1. Das neue Array wird also {1, 4, 2, 1, -9, 6} sein. Jetzt werden wir formieren Das Präfixarray ist {1, 5, 7, 8, -1, 5}. Der letzte Schritt besteht darin, die Summe auf 1+5+8+5 = 19 zu maximieren, was der endgültigen Ausgabe entspricht.

Die im folgenden Programm verwendete Methode lautet wie folgt: -

  • Deklarieren Sie ein ganzzahliges Array und eine temporäre Variable x als -1 und setzen Sie dann arr[0] auf arr[0] * x.

  • Berechnen Sie die Größe des Arrays. Deklarieren Sie ein Präfix-Array prefix_array[size]. Rufen Sie die Funktion create_prefix_arr(arr, size, prefix_array) auf, um ein Präfix-Array für das angegebene Array zu generieren. Drucken des Präfix-Arrays

  • ruft die Funktion maximieren_sum(präfix_array, größe) auf, die die maximale Summe des Arrays speichert.

  • Innerhalb der Funktion void create_prefix_arr(int arr[], int size, int prefix_array[])

    • setze prefix_array[0] auf arr[0].

    • Beginnen Sie mit der Schleife von i bis 0, bis die Größe des Arrays erreicht ist. Setzen Sie innerhalb der Schleife prefix_array[i] auf prefix_array[i-1] + arr[i].

  • Innerhalb der Funktion int maximieren_sum(int prefix_array[], int size)

    • deklarieren Sie eine temporäre Variable temp und setzen Sie sie auf -1.

    • Beginnen Sie mit der Schleife von i bis 0, bis die Größe des Arrays erreicht ist. Setzen Sie innerhalb der Schleife temp auf max(temp, prefix_array[i])

    • Deklarieren Sie ein Array arr[temp +1] und initialisieren Sie alle Elemente des Arrays auf 0.

    • Beginnen Sie mit der Schleife von i bis 0, bis die Größe des Arrays erreicht ist. Deklarieren Sie innerhalb der Schleife eine temporäre Variable max_sum arr[prefix_array[i]]++

    • und setzen Sie sie auf 0. Deklarieren Sie eine Variable i als temp

    • , um die Schleife zu starten, wenn i>0. Überprüfen Sie, ob arr[i] > 0, dann setzen Sie max_sum auf max_sum + i und setzen Sie arr[i-1]-- und arr[i]--. Andernfalls dekrementieren Sie i um 1.

    • Max_sum zurückgeben.

Beispiel

#include <bits/stdc++.h>
using namespace std;
#define Max_size 5
//create the prefix array
void create_prefix_arr(int arr[], int size, int prefix_array[]) {
   prefix_array[0] = arr[0];
   for(int i=0; i<size; i++)  {
      prefix_array[i] = prefix_array[i-1] + arr[i];
   }
}
//find the maximum sum of prefix array
int maximize_sum(int prefix_array[], int size) {
   int temp = -1;
   for(int i = 0; i < size; i++) {
      temp = max(temp, prefix_array[i]);
   }
   int arr[temp + 1];
   memset(arr, 0, sizeof(arr));

   for(int i = 0; i < size; i++) {
      arr[prefix_array[i]]++;
   }
   int max_sum = 0;
   int i = temp;
   while(i>0) {
      if(arr[i] > 0) {
         max_sum = max_sum + i;
         arr[i-1]--;
         arr[i]--;
      } else {
         i--;
      }
   }
   return max_sum;
}

int main() {
   int arr[] = {2, 4, 1, 5, 2};
      int x = -1;
      arr[0] = arr[0] * x;
      int size = sizeof(arr) / sizeof(arr[0]);
   int prefix_array[size];

   //call function to create a prefix array
   create_prefix_arr(arr, size, prefix_array);
   //print the prefix array
   cout<<"Prefix array is: ";
   for(int i = 0; i < size; i++) {
      cout << prefix_array[i] << " ";
   }
   //print the maximum sum of prefix array
   cout<<"\nMaximize the sum of array by multiplying prefix of array with -1 are:" <<maximize_sum(prefix_array, size);
   return 0;
}
Nach dem Login kopieren

Ausgabe

Wenn wir den obigen Code ausführen, wird die folgende Ausgabe generiert

Prefix array is: -2 2 3 8 10
Maximize the sum of array by multiplying prefix of array with -1 are: 21
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonMaximieren Sie in C++ die Summe eines Arrays, indem Sie sein Präfix mit -1 multiplizieren. 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