Chúng ta được cung cấp một mảng số nguyên và nhiệm vụ trước tiên là tìm nạp tiền tố của một mảng rồi nhân nó với -1, thứ hai là tính tổng tiền tố của một mảng và cuối cùng tìm tổng lớn nhất từ mảng tiền tố được tạo.
Mảng tiền tố được tạo dưới dạng -
Phần tử đầu tiên của prefixArray [0] =phần tử đầu tiên của một mảng
Phần tử thứ hai của prefixArray [1] =prefixArray [0] + arr [1]
Phần tử thứ ba của prefixArray [2] =prefixArray [1] + arr [2]
Phần tử thứ tư của prefixArray [3] =prefixArray [2] + arr [3]… ..etc.
Hãy cho chúng tôi xem các tình huống đầu ra đầu vào khác nhau cho việc này -
Trong - int arr [] ={2, 4, 1, 5, 2}
Hết - Tiền tố mảng là:-2 2 3 8 10 Tối đa hóa tổng của mảng bằng cách nhân tiền tố của mảng với -1 là:21
Giải thích - chúng ta được cho với một mảng số nguyên. Vì vậy, trước tiên chúng ta sẽ tìm nạp tiền tố của một mảng là 2 và bội nó với -1. Vì vậy, mảng mới sẽ là {-2, 4, 1, 5, 2}. Bây giờ, chúng ta sẽ tạo mảng tiền tố là {-2, 2, 3, 8, 10}. Bước cuối cùng là tối đa hóa tổng là -2 + 2 + 3 + 8 + `0 =21 là kết quả cuối cùng.
Trong - int arr [] ={-1, 4, 2, 1, -9, 6};
Hết - Tiền tố mảng là:1 5 7 8 -1 5 Tối đa hóa tổng của mảng bằng cách nhân tiền tố của mảng với -1 là:19
Giải thích - chúng ta được cho với một mảng số nguyên. Vì vậy, trước tiên chúng ta sẽ tìm nạp tiền tố của một mảng là -1 và bội nó với -1. Vì vậy, mảng mới sẽ là {1, 4, 2, 1, -9, 6}. Bây giờ, chúng ta sẽ tạo mảng tiền tố là {1, 5, 7, 8, -1, 5}. Bước cuối cùng là tối đa hóa tổng là 1 + 5 + 8 + 5 =19, là kết quả cuối cùng.
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau -
-
Khai báo một mảng số nguyên và một biến tạm thời là x thành -1, sau đó đặt arr [0] thành arr [0] * x.
-
Tính kích thước của một mảng. Khai báo một mảng tiền tố là prefix_arry [size]. Gọi một hàm create_prefix_arr (arr, size, prefix_array) để tạo mảng tiền tố từ mảng đã cho. In mảng tiền tố
-
Gọi hàm Maximum_sum (prefix_array, size) sẽ lưu trữ tổng lớn nhất của mảng.
-
Bên trong hàm void create_prefix_arr (int arr [], int size, int prefix_array [])
-
Đặt prefix_array [0] thành arr [0].
-
Bắt đầu vòng lặp FOR từ i đến 0 cho đến hết kích thước của một mảng. Bên trong vòng lặp, đặt prefix_array [i] thành prefix_array [i-1] + arr [i].
-
-
Bên trong hàm int Maximum_sum (int prefix_array [], int size)
-
Khai báo một biến tạm thời dưới dạng tạm thời và đặt nó thành -1.
-
Bắt đầu vòng lặp FOR từ i đến 0 cho đến hết kích thước của một mảng. Bên trong vòng lặp, đặt nhiệt độ là max (temp, prefix_array [i])
-
Khai báo một mảng là arr [temp +1] và khởi tạo tất cả các phần tử của một mảng bằng 0.
-
Bắt đầu vòng lặp FOR từ i đến 0 cho đến hết kích thước của một mảng. Bên trong vòng lặp, đặt arr [prefix_array [i]] ++
-
Khai báo một biến tạm thời là max_sum và đặt nó thành 0. Khai báo một biến là int i thành temp
-
Bắt đầu vòng lặp WHILE i> 0. Kiểm tra IF arr [i]> 0, sau đó đặt max_sum thành max_sum + i và giảm arr [i-1] - và giảm arr [i] -. ELSE, giảm i đi 1.
-
Trả về max_sum.
-
Ví dụ
#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; }
Đầu ra
Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra Kết quả sau
Prefix array is: -2 2 3 8 10 Maximize the sum of array by multiplying prefix of array with -1 are: 21