📜  后缀和数组

📅  最后修改于: 2022-05-13 01:56:06.833000             🧑  作者: Mango

后缀和数组

后缀和数组给定一个大小为N的数组arr[] ,任务是计算并返回其后缀和数组

例子:

方法:要填充后缀和数组,我们将索引 N-1 运行到 0,并继续将当前元素与后缀和数组中的前一个值相加。

  • 创建一个大小为 N 的数组来存储后缀和。
  • 用原始数组的最后一个元素初始化后缀和数组的最后一个元素
    suffixSum[n-1] = arr[n-1]
  • 从N-2遍历原始数组到0
    • 对于每个索引,我找到后缀总和并将其存储在 suffixSum[i]
    • suffixSum[i] = suffixSum[i + 1] + arr[i]
  • 返回计算的后缀和数组。

下面是上述方法创建后缀和数组的实现:

C++
// C++ program for Implementing
// suffix sum array
#include 
using namespace std;
 
// Function to create suffix sum array
vector createSuffixSum(vector arr, int n)
{
    // Create an array to store the suffix sum
    vector suffixSum(n, 0);
 
    // Initialize the last element of
    // suffix sum array with last element
    // of original array
    suffixSum[n - 1] = arr[n - 1];
 
    // Traverse the array from n-2 to 0
    for (int i = n - 2; i >= 0; i--)
 
        // Adding current element
        // with previous element from back
        suffixSum[i] = suffixSum[i + 1] + arr[i];
 
    // Return the computed suffixSum array
    return suffixSum;
}
 
// Driver Code
int main()
{
    vector arr = { 10, 14, 16, 20 };
    int N = arr.size();
 
    // Function call to fill suffix sum array
    vector suffixSum = createSuffixSum(arr, N);
 
    // Printing the computed suffix sum array
    cout << "Suffix sum array: ";
    for (int i = 0; i < N; i++)
        cout << suffixSum[i] << " ";
}


Java
// Java program for Implementing
// suffix sum array
import java.util.*;
public class GFG {
 
  // Function to create suffix sum array
  static int[] createSuffixSum(int[] arr, int n)
  {
 
    // Create an array to store the suffix sum
    int[] suffixSum = new int[n];
 
    for (int i = 0; i < n; i++) {
      suffixSum[i] = 0;
    }
 
    // Initialize the last element of
    // suffix sum array with last element
    // of original array
    suffixSum[n - 1] = arr[n - 1];
 
    // Traverse the array from n-2 to 0
    for (int i = n - 2; i >= 0; i--)
 
      // Adding current element
      // with previous element from back
      suffixSum[i] = suffixSum[i + 1] + arr[i];
 
    // Return the computed suffixSum array
    return suffixSum;
  }
 
  // Driver Code
  public static void main(String args[])
  {
    int[] arr = { 10, 14, 16, 20 };
    int N = arr.length;
 
    // Function call to fill suffix sum array
    int[] suffixSum = createSuffixSum(arr, N);
 
    // Printing the computed suffix sum array
    System.out.print("Suffix sum array: ");
    for (int i = 0; i < N; i++)
      System.out.print(suffixSum[i] + " ");
  }
}
 
// This code is contributed by Samim Hossain Mondal.


Python3
# python3 program for Implementing
# suffix sum array
 
# Function to create suffix sum array
def createSuffixSum(arr, n):
 
    # Create an array to store the suffix sum
    suffixSum = [0 for _ in range(n)]
 
    # Initialize the last element of
    # suffix sum array with last element
    # of original array
    suffixSum[n - 1] = arr[n - 1]
 
    # Traverse the array from n-2 to 0
    for i in range(n-2, -1, -1):
 
        # Adding current element
        # with previous element from back
        suffixSum[i] = suffixSum[i + 1] + arr[i]
 
    # Return the computed suffixSum array
    return suffixSum
 
# Driver Code
if __name__ == "__main__":
 
    arr = [10, 14, 16, 20]
    N = len(arr)
 
    # Function call to fill suffix sum array
    suffixSum = createSuffixSum(arr, N)
 
    # Printing the computed suffix sum array
    print("Suffix sum array: ", end="")
    for i in range(0, N):
        print(suffixSum[i], end=" ")
 
    # This code is contributed by rakeshsahni


C#
// C# program for Implementing
// suffix sum array
using System;
class GFG {
 
  // Function to create suffix sum array
  static int[] createSuffixSum(int[] arr, int n)
  {
 
    // Create an array to store the suffix sum
    int[] suffixSum = new int[n];
 
    for (int i = 0; i < n; i++) {
      suffixSum[i] = 0;
    }
 
    // Initialize the last element of
    // suffix sum array with last element
    // of original array
    suffixSum[n - 1] = arr[n - 1];
 
    // Traverse the array from n-2 to 0
    for (int i = n - 2; i >= 0; i--)
 
      // Adding current element
      // with previous element from back
      suffixSum[i] = suffixSum[i + 1] + arr[i];
 
    // Return the computed suffixSum array
    return suffixSum;
  }
 
  // Driver Code
  public static void Main()
  {
    int[] arr = { 10, 14, 16, 20 };
    int N = arr.Length;
 
    // Function call to fill suffix sum array
    int[] suffixSum = createSuffixSum(arr, N);
 
    // Printing the computed suffix sum array
    Console.Write("Suffix sum array: ");
    for (int i = 0; i < N; i++)
      Console.Write(suffixSum[i] + " ");
  }
}
 
// This code is contributed by Samim Hossain Mondal.


Javascript



输出
Suffix sum array: 60 50 36 20 

时间复杂度:O(N),遍历原始数组计算后缀和。
辅助空间:O(N),存储后缀和数组。