最大子序列和问题的算法的改进及复杂度分析
最大子序列和的问题
算法1 O(N^3)
(本算法并不计算实际的子序列,实际的计算还要添加一些额外的代码,这里只研究复杂度)
1 public static int maxSubSum1(int[] a){//O(N^3) 2 int maxSum = 0; 3 4 for (int i = 0; i < a.length; i++) { 5 for (int j = 0; j < a.length; j++) { 6 int thisSum = 0;//O(1) 7 8 for (int k = i; k <= j; k++) { 9 thisSum += a[k]; 10 } 11 if (thisSum > maxSum){ //O(N^2) 12 maxSum = thisSum; 13 } 14 15 } 16 } 17 return maxSum; 18 }
我们可以通过撤除一个for循环来避免三次的运行时间
算法二:复杂度O(N^2)
public static int maxSubSum1(int[] a) {//O(N^2) int maxSum = 0; for (int i = 0; i < a.length; i++) { int thisSum = 0;//O(1) for (int j = 0; j < a.length; j++) { thisSum += a[j]; if (thisSum > maxSum) { //O(N) maxSum = thisSum; } } } return maxSum; }
算法1中第8/9行上的计算过分地耗费了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!