Input: nums =[4,3,-2,5]Output: 10Explanation:
The sum score at index 0ismax(4,4+3+-2+5)= max(4,10)=10.The sum score at index 1ismax(4+3,3+-2+5)= max(7,6)=7.The sum score at index 2ismax(4+3+-2,-2+5)= max(5,3)=5.The sum score at index 3ismax(4+3+-2+5,5)= max(10,5)=10.The maximum sum score of nums is10.
Example 2:
1
2
3
4
5
6
Input: nums =[-3,-5]Output: -3Explanation:
The sum score at index 0ismax(-3,-3+-5)= max(-3,-8)=-3.The sum score at index 1ismax(-3+-5,-5)= max(-8,-5)=-5.The maximum sum score of nums is-3.
To find the maximum sum score at any index, we need to consider the sum of the first i+1 elements and the sum of the last n-i elements for each index. The answer is the maximum among all these values. We can use prefix and suffix sums to compute these efficiently.
classSolution {
publiclongmaximumSumScore(int[] nums) {
int n = nums.length;
long[] prefix =newlong[n], suffix =newlong[n];
prefix[0]= nums[0];
for (int i = 1; i < n; ++i) prefix[i]= prefix[i-1]+ nums[i];
suffix[n-1]= nums[n-1];
for (int i = n-2; i >= 0; --i) suffix[i]= suffix[i+1]+ nums[i];
long ans = Long.MIN_VALUE;
for (int i = 0; i < n; ++i)
ans = Math.max(ans, Math.max(prefix[i], suffix[i]));
return ans;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classSolution {
funmaximumSumScore(nums: IntArray): Long {
val n = nums.size
val prefix = LongArray(n)
val suffix = LongArray(n)
prefix[0] = nums[0].toLong()
for (i in1 until n) prefix[i] = prefix[i-1] + nums[i]
suffix[n-1] = nums[n-1].toLong()
for (i in n-2 downTo 0) suffix[i] = suffix[i+1] + nums[i]
var ans = Long.MIN_VALUE
for (i in0 until n)
ans = maxOf(ans, maxOf(prefix[i], suffix[i]))
return ans
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
classSolution:
defmaximumSumScore(self, nums: list[int]) -> int:
n = len(nums)
prefix = [0] * n
suffix = [0] * n
prefix[0] = nums[0]
for i in range(1, n):
prefix[i] = prefix[i-1] + nums[i]
suffix[-1] = nums[-1]
for i in range(n-2, -1, -1):
suffix[i] = suffix[i+1] + nums[i]
ans = float('-inf')
for i in range(n):
ans = max(ans, prefix[i], suffix[i])
return ans
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
impl Solution {
pubfnmaximum_sum_score(nums: Vec<i32>) -> i64 {
let n = nums.len();
letmut prefix =vec![0i64; n];
letmut suffix =vec![0i64; n];
prefix[0] = nums[0] asi64;
for i in1..n { prefix[i] = prefix[i-1] + nums[i] asi64; }
suffix[n-1] = nums[n-1] asi64;
for i in (0..n-1).rev() { suffix[i] = suffix[i+1] + nums[i] asi64; }
letmut ans =i64::MIN;
for i in0..n {
ans = ans.max(prefix[i]).max(suffix[i]);
}
ans
}
}