154th LeetCode Weekly Contest
A B D均比较简单。先说C题
K-Concatenation Maximum Sum
Given an integer array arr
and an integer k
, modify the array by repeating it k
times.
For example, if arr = [1, 2]
and k = 3
then the modified array will be [1, 2, 1, 2, 1, 2]
.
Return the maximum sub-array sum in the modified array. Note that the length of the sub-array can be 0
and its sum in that case is 0
.
As the answer can be very large, return the answer modulo 10^9 + 7
.
Example 1:
Input: arr = [1,2], k = 3 Output: 9
Example 2:
Input: arr = [1,-2,1], k = 5 Output: 2
Example 3:
Input: arr = [-1,-2], k = 7 Output: 0
Constraints:
1 <= arr.length <= 10^5
1 <= k <= 10^5
-10^4 <= arr[i] <= 10^4
这里有个猜测,
如果K=1,那么我只需要算这个数组的最大子数组和即可。
如果K=2,那么我也只需要算这个数组的最大子数组和,只不过是多加了长度。
如果K>2,那么不需要再讨论什么子数组了,实际上和K<=2类似。所以K>2以后的数组,如果和大于0,则全都要。
class Solution { public: int kConcatenationMaxSum(vector<int>& arr, int k) { int sum1 = 0,sum2 = 0; int ant = 0; int sum3 = 0; int arrsize = arr.size(); for(int i = 0;i<arrsize;i++){ ant+=arr[i]; sum3+=arr[i]; sum1 = max(ant,sum1); if(ant<=0){ ant=0; } } ant = 0; for(int i = 0;i<arrsize*2;i++){ ant+=arr[i%arrsize]; sum2 = max(ant,sum2); if(ant<=0){ ant=0; } } if(k==1){ return sum1; } cout<<sum3<<" "<<sum1<<" "<<sum2<<endl; if(sum3>0){ for(int i=2;i<k;i++){ sum2 +=sum3; sum2%=1000000007; } } return sum2; } };
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~