列表

详情


1746. 经过一次操作后的最大子数组和

你有一个整数数组 nums。你只能将一个元素 nums[i] 替换为 nums[i] * nums[i]

返回替换后的最大子数组和。

 

示例 1:

输入:nums = [2,-1,-4,-3]
输出:17
解释:你可以把-4替换为16(-4*(-4)),使nums = [2,-1,16,-3]. 现在,最大子数组和为 2 + -1 + 16 = 17.

示例 2:

输入:nums = [1,-1,1,1,-1,-1,1]
输出:4
解释:你可以把第一个-1替换为1,使 nums = [1,1,1,1,-1,-1,1]. 现在,最大子数组和为 1 + 1 + 1 + 1 = 4.

 

提示:

原站题解

去查看

class Solution {
public:
int maxSumAfterOperation(vector<int>& nums) {
}
};
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

golang 解法, 执行用时: 88 ms, 内存消耗: 8 MB, 提交时间: 2023-10-22 10:40:34

func maxSumAfterOperation(nums []int) (ans int) {
x, y := 0, 0
for _, v := range nums {
y = max(0, max(v + y, x + v * v))
x = max(0, x + v)
ans = max(ans, max(x, y))
}
return
}
func max(x, y int) int {
if x > y {
return x
}
return y
}

python3 解法, 执行用时: 292 ms, 内存消耗: 26.8 MB, 提交时间: 2023-10-22 10:40:17

class Solution:
def maxSumAfterOperation(self, nums: List[int]) -> int:
res=dp0=dp1=-float('inf')
for i in range(len(nums)):
dp1 = max(dp0+nums[i]*nums[i],nums[i]*nums[i],dp1+nums[i])
dp0 = max(dp0+nums[i],nums[i])
res = max(res,dp1,dp0)
return res

java 解法, 执行用时: 7 ms, 内存消耗: 56.3 MB, 提交时间: 2023-10-22 10:39:49

class Solution {
public int maxSumAfterOperation(int[] nums) {
/*
dp[0]:
dp[1]:
*/
int []dp = new int[2];
dp[0] = nums[0];
dp[1] = nums[0] * nums[0];
int res = dp[1];
for(int i = 1; i < nums.length; i++){
//00
dp[0] = Math.max(dp[0],0);
//Math.max(,+)
dp[1] = Math.max(dp[1]+nums[i],dp[0]+nums[i]*nums[i]);
dp[0] = dp[0] + nums[i];
res = Math.max(res,dp[1]);
}
return res;
}
}

java 解法, 执行用时: 5 ms, 内存消耗: 56.1 MB, 提交时间: 2023-10-22 10:39:35

class Solution {
public int maxSumAfterOperation(int[] nums) {
int dp1 = 0 , dp2 = 0 , max = 0;
for(int i = 0 ; i < nums.length ; i++){
dp1 = Math.max(dp1+nums[i] , dp2+nums[i]*nums[i]);//
dp2 = Math.max(nums[i]+dp2 , 0);//
max = Math.max(dp1 , max);
}
return max;
}
}

上一题