logo

Vorgang zum Hinzufügen eines konstanten Zeitbereichs für ein Array

Gegeben sei ein Array der Größe N, das ausschließlich mit Nullen initialisiert ist. Wir erhalten viele Bereiche, in denen Abfragen hinzugefügt werden, die auf dieses Array angewendet werden sollten. Wir müssen das endgültige aktualisierte Array als Ergebnis drucken. 

Beispiele:  

N = 6 Arr = [0 0 0 0 0 0] rangeUpdate1 [0 2] add 100 Arr = [100 100 100 0 0 0] rangeUpdate1 [1 5] add 100 Arr = [100 200 200 100 100 100] rangeUpdate1 [2 3] add 100 Arr = [100 200 300 200 100 100] Which is the final updated array.

Dieses Problem kann mit gelöst werden Segmentbaum mit verzögerten Updates in O(log N) Zeit pro Abfrage, aber wir können es hier besser machen, da keine Aktualisierungsoperation gegeben ist. Mit dieser Logik können wir jede Abfrage in konstanter Zeit verarbeiten. Wenn eine Abfrage zum Hinzufügen von V im Bereich [a b] angegeben ist, werden wir V zu arr[a] und –V zu arr[b+1] hinzufügen. Wenn wir nun die tatsächlichen Werte des Arrays erhalten möchten, konvertieren wir das obige Array in ein Präfix-Summen-Array. 



Java-String in int

Sehen Sie sich zum Verständnis das folgende Beispiel an:

Arr = [0 0 0 0 0 0] rangeUpdate1 [0 2] add 100 Arr = [100 0 0 -100 0 0] rangeUpdate1 [1 5] add 100. Arr = [100 100 0 -100 0 0] Note: You can not add -100 at 6th index because array length is 6. rangeUpdate1 [2 3] add 100 Arr = [100 100 100 -100 -100 0] Now we will convert above operation array to prefix sum array as shown below Arr = [100 200 300 200 100 100] Which is the final updated array.

Wenn wir also einen Wert V zu einem bestimmten Index des Arrays hinzufügen, stellt dies das Hinzufügen von V zu allen Elementen direkt an diesem Index dar. Deshalb fügen wir –V nach dem Bereich hinzu, um seinen Effekt nach dem Bereich der Add-Abfrage zu entfernen. 
Bitte beachten Sie, dass im folgenden Code das Hinzufügen von –V weggelassen wird, wenn der Bereich bis zum letzten Index reicht, um die Speichergrenze des Arrays zu berücksichtigen. 

Durchführung:

C++
// C++ program to get updated array after many array range // add operation #include    using namespace std; // Utility method to add value val to range [lo hi] void add(int arr[] int N int lo int hi int val) {  arr[lo] += val;  if (hi != N - 1)  arr[hi + 1] -= val; } // Utility method to get actual array from operation array void updateArray(int arr[] int N) {  // convert array into prefix sum array  for (int i = 1; i < N; i++)  arr[i] += arr[i - 1]; } // method to print final updated array void printArr(int arr[] int N) {  updateArray(arr N);  for (int i = 0; i < N; i++)  cout << arr[i] << ' ';  cout << endl; } // Driver code int main() {  int N = 6;  int arr[N] = {0};  // Range add Queries  add(arr N 0 2 100);  add(arr N 1 5 100);  add(arr N 2 3 100);  printArr(arr N);  return 0; } 
Java
// Java program to get updated array after // many array range add operation import java.io.*; class GFG {  // Utility method to add value val  // to range [lo hi]  static void add(int arr[] int N int lo int hi  int val)  {  arr[lo] += val;  if (hi != N - 1)  arr[hi + 1] -= val;  }  // Utility method to get actual array from  // operation array  static void updateArray(int arr[] int N)  {  // convert array into prefix sum array  for (int i = 1; i < N; i++)  arr[i] += arr[i - 1];  }  // method to print final updated array  static void printArr(int arr[] int N)  {  updateArray(arr N);  for (int i = 0; i < N; i++)  System.out.print('' + arr[i] + ' ');  System.out.print('n');  }  // Driver code  public static void main(String[] args)  {  int N = 6;  int arr[] = new int[N];  // Range add Queries  add(arr N 0 2 100);  add(arr N 1 5 100);  add(arr N 2 3 100);  printArr(arr N);  } } // This code is contributed by Prakriti Gupta 
Python3
# Python3 program to get updated array # after many array range add operation # Utility method to add value # val to range [lo hi] def add(arr N lo hi val): arr[lo] += val if (hi != N - 1): arr[hi + 1] -= val # Utility method to get actual # array from operation array def updateArray(arr N): # convert array into prefix sum array for i in range(1 N): arr[i] += arr[i - 1] # method to print final updated array def printArr(arr N): updateArray(arr N) for i in range(N): print(arr[i] end=' ') print() # Driver code N = 6 arr = [0 for i in range(N)] # Range add Queries add(arr N 0 2 100) add(arr N 1 5 100) add(arr N 2 3 100) printArr(arr N) # This code is contributed by Anant Agarwal. 
C#
// C# program to get updated array after // many array range add operation using System; class GFG {  // Utility method to add value val  // to range [lo hi]  static void add(int[] arr int N int lo int hi  int val)  {  arr[lo] += val;  if (hi != N - 1)  arr[hi + 1] -= val;  }  // Utility method to get actual  // array from operation array  static void updateArray(int[] arr int N)  {  // convert array into  // prefix sum array  for (int i = 1; i < N; i++)  arr[i] += arr[i - 1];  }  // method to print final updated array  static void printArr(int[] arr int N)  {  updateArray(arr N);  for (int i = 0; i < N; i++)  Console.Write('' + arr[i] + ' ');  Console.Write('n');  }  // Driver code  public static void Main()  {  int N = 6;  int[] arr = new int[N];  // Range add Queries  add(arr N 0 2 100);  add(arr N 1 5 100);  add(arr N 2 3 100);  printArr(arr N);  } } // This code is contributed by Nitin Mittal. 
PHP
 // PHP program to get updated array after  // many array range add operation // Utility method to add value val  // to range [lo hi] function add(&$arr $N $lo $hi $val) { $arr[$lo] += $val; if ($hi != $N - 1) $arr[$hi + 1] -= $val; } // Utility method to get actual array // from operation array function updateArray(&$arr $N) { // convert array into prefix sum array for ($i = 1; $i < $N; $i++) $arr[$i] += $arr[$i - 1]; } // method to print final updated array function printArr(&$arr $N) { updateArray($arr $N); for ($i = 0; $i < $N; $i++) echo $arr[$i] . ' '; echo 'n'; } // Driver Code $N = 6; $arr = array_fill(0 $N NULL); // Range add Queries add($arr $N 0 2 100); add($arr $N 1 5 100); add($arr $N 2 3 100); printArr($arr $N); // This code is contributed by ita_c ?> 
JavaScript
<script> // Javascript program to get updated array after // many array range add operation    // Utility method to add value val  // to range [lo hi]  function add(arrNlohival)  {  arr[lo] += val;  if (hi != N - 1)  arr[hi + 1] -= val;  }    // Utility method to get actual array from  // operation array  function updateArray(arrN)  {  // convert array into prefix sum array  for (let i = 1; i < N; i++)  arr[i] += arr[i - 1];  }    // method to print final updated array  function printArr(arrN)  {  updateArray(arr N);  for (let i = 0; i < N; i++)  document.write('' + arr[i] + ' ');  document.write('  
'
); } // Driver code let N = 6; let arr=new Array(N); for(let i=0;i<N;i++) { arr[i]=0; } // Range add Queries add(arr N 0 2 100); add(arr N 1 5 100); add(arr N 2 3 100); printArr(arr N); // This code is contributed by rag2127 </script>

Ausgabe
100 200 300 200 100 100 

Zeitkomplexität: O(n) 
Hilfsraum: O(1)

 

Quiz erstellen