1191. K 次串联后最大子数组之和-暴力动态规划,和优化算法
2023-09-14 09:06:52 时间
给定一个整数数组 arr 和一个整数 k ,通过重复 k 次来修改数组。
例如,如果 arr = [1, 2] , k = 3 ,那么修改后的数组将是 [1, 2, 1, 2, 1, 2] 。
返回修改后的数组中的最大的子数组之和。注意,子数组长度可以是 0,在这种情况下它的总和也是 0。
由于 结果可能会很大,需要返回的 109 + 7 的 模 。
示例 1:
输入:arr = [1,2], k = 3
输出:9
示例 2:
输入:arr = [1,-2,1], k = 5
输出:2
示例 3:
输入:arr = [-1,-2], k = 7
输出:0
下面这个空间复杂度不能通过,
int kConcatenationMaxSum(int* arr, int arrSize, int k){
long long dp[k*arrSize+1];
dp[0]=0;
long long max=0;
for(int i=1;i<k*arrSize+1;i++){
if(dp[i-1]>0){
dp[i]=(long long)fmax(0,dp[i-1]+arr[(i-1)%arrSize]);
}
else{
dp[i]=(long long)fmax(arr[(i-1)%arrSize],0);
}
if(dp[i]>max){
max=dp[i];
}
}
printf("-- %d %d %d %d",dp[k*arrSize],dp[k*arrSize-1],dp[k*arrSize-2]);
return max%1000000007;
}
优化之后的,即可通过,解题代码如下:
int kConcatenationMaxSum(int* arr, int arrSize, int k){
long long max=0;
int sum=0;
for(int i=0;i<arrSize;i++){
sum=sum+arr[i];
}
int i=1;
int re=0;
int backmax=0;
int premax=0;
if(k>=2){
if(k>2&&sum>0){
for(int i=0;i<k-2;i++)
re=(sum+re)%1000000007;
}
int pre=0;
for(int i=0;i<arrSize;i++){
pre=pre+arr[i];
premax=(int)fmax(pre,premax)%1000000007;
}
int back=0;
for(int i=arrSize-1;i>=0;i--){
back=back+arr[i];
backmax=(int)fmax(back,backmax)%1000000007;
}
re=re+backmax+premax;
//printf("sbp %d %d %d",sum,back,back);
}
int dp[arrSize+1];
dp[0]=0;
for(int i=1;i<arrSize+1;i++){
if(dp[i-1]>0){
dp[i]=(int)fmax(0,dp[i-1]+arr[(i-1)%arrSize]);
}
else{
dp[i]=(int)fmax(arr[(i-1)%arrSize],0);
}
if(dp[i]>re){
re=dp[i];
}
}
// printf("-- %d %d %d %d",dp[k*arrSize],dp[k*arrSize-1],dp[k*arrSize-2]);
return re%1000000007;
}
相关文章
- 算法知识之最长公共子序列问题(动态规划)
- 全面拥抱 FastApi — 多应用程序项目结构规划
- 机器人中的轨迹规划(Trajectory Planning )
- Java实现 LeetCode 730 统计不同回文子字符串(动态规划)
- 动态规划&矩阵连乘
- 数据结构与算法之美-14 动态规划 [MD]
- Leetcode学习计划之动态规划入门day10(413,91)
- RL笔记:动态规划(1): 策略估计和策略提升
- 基于球向量的粒子群优化(SPSO)算法在无人机路径规划中的实现(Matlab代码实现)
- 野生前端的数据结构练习(11)动态规划算法
- m基于蚁群优化模糊控制的机器人路线规划和避障算法matlab仿真
- 基于粒子群优化算法的移动机器人全局路径规划-附代码
- 2212. 射箭比赛中的最大得分-动态规划算法-多背包问题转化
- 931. 下降路径最小和-动态规划-反向路径求解最优值
- 915. 分割数组-动态规划算法
- [LeetCode] 523. 连续的子数组和 ☆☆☆(动态规划)
- 动态规划精讲(一)LC最长公共子序列
- 【原版的】PHP技术成长规划过程中猿人
- 干货分享 | 浅谈软件测试规划及测试用例
- 建模算法(十一)——目标规划
- 建模算法(四)——动态规划
- 建模算法(三)——非线性规划
- 数据结构和算法 十九、动态规划