要求找到累加和最大的子数组(连续),返回最大累加和
package demo;
public class P66 {
//要求找到累加和最大的子数组(连续),返回最大累加和
//递推法:从左向右扫描,同时记录当前子数组的累加和arrSum、当前最大累加和maxSum。
//如果arrSum<0,说明这部分产生负面作用,所以舍弃、重新开子数组。否则继续往后加,每次增加检查是否比maxSum更大
public static void main(String[] args) {
int[] arr= {1,-2,3,5,-2,6,-1};
int[] result=findMaxSum(arr,arr.length);
System.out.println("从下标 "+result[0]+" 到 "+result[1]+" 为最大子数组 , 累加和为:"+result[2]);
}
static int[] findMaxSum(int[] arr, int n) {
int i=0;
while(arr[i]<0)
i++;
int left=i;
int arrSum=arr[i];
int right=i;
int maxSum=arrSum;
for(int j=i+1;j<n;j++) {
arrSum+=arr[j];
if(arrSum<0) {
j++;
while(arr[j]<0)
j++;
left=j; //舍弃后,重设左指针
arrSum=arr[j];
}
else if(arrSum>maxSum) {
right=j; //新的max出现,重设右指针
maxSum=arrSum;
}
}
return new int[] {left,right,maxSum};
}
}
分类:
数据结构与算法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具