Installazione di elettrodomestici: come trovare installatori
Come Trovare Installatori per l'Installazione di Elettrodomestici
Come Trovare un Installatore per l'Installazione di Elettrodomestici.
Scopri come trovare i migliori installatori per l'installazione dei tuoi elettrodomestici. In questo articolo, esploreremo strategie efficaci per selezionare professionisti qualificati, garantendo un servizio di alta qualità e soddisfazione. Non perdere i nostri consigli pratici per un'installazione senza problemi!
Trova professionisti vicino a te
Trova professionisti
Given an array of integers, return the maximum sum for a non-empty
subarray (contiguous elements) with at most one element deletion.
In other words, you want to choose a subarray and optionally delete one
element from it so that there is still at least one element left and the
sum of the remaining elements is maximum.
Example
For inputArray = [1, -2, 0, 3], the output should be
maxSubarraySumWithOneDeletion(inputArray) = 4.
The resulting subarray will be [1, 0, 3].
Solution:
int maxSubarraySumWithOneDeletion(std::vector inputArray) {
int len = inputArray.size();
if (len == 0) return 0;
int maxSum = INT_MIN;
int currSum = 0;
int maxEndingHere = 0;
int maxStart = 0;
int maxEnd = 0;
int maxStartWithoutDeletion = 0;
for (int i = 0; i < len; i++) {
int val = inputArray[i];
currSum += val;
maxEndingHere += val;
if (maxEndingHere > maxSum) {
maxSum = maxEndingHere;
maxStart = maxStartWithoutDeletion;
maxEnd = i;
}
if (maxEndingHere < 0) {
maxEndingHere = 0;
maxStartWithoutDeletion = i+1;
}
}
// check if the maximum sum can be achieved without deletion
if (currSum == maxSum) return maxSum;
// check if the maximum sum can be achieved by deleting the first element
int maxSumWithoutFirst = maxSubarraySumWithOneDeletion(std::vector(inputArray.begin() + 1, inputArray.end()));
if (maxSumWithoutFirst > maxSum) return maxSumWithoutFirst;
// check if the maximum sum can be achieved by deleting the last element
int maxSumWithoutLast = maxSubarraySumWithOneDeletion(std::vector(inputArray.begin(), inputArray.end() - 1));
if (maxSumWithoutLast > maxSum) return maxSumWithoutLast;
// check if the maximum sum can be achieved by deleting a middle element
int maxSumWithoutMiddle = INT_MIN;
for (int i = maxStart; i <= maxEnd; i++) {
int leftSum = maxSubarraySumWithOneDeletion(std::vector(inputArray.begin(), inputArray.begin() + i));
int rightSum = maxSubarraySumWithOneDeletion(std::vector(inputArray.begin() + i + 1, inputArray.end()));
maxSumWithoutMiddle = max(maxSumWithoutMiddle, leftSum + rightSum);
}
return max(maxSum, maxSumWithoutMiddle);
}