最大子序列和的四种不同复杂度实现
2017-09-15 15:59
357 查看
1.最差的时间复杂度实现O(n^3)
2.较差的时间复杂度O(n^2)
3.较好的时间复杂度O(nlogn)
4.最好的时间复杂度O(n)
public static int worst(int [] a){ int maxSum = 0; for(int i = 0 ; i < a.length ; i++){ for(int j = i ; j < a.length ; j++){ int thissum = 0; for(int k = i ; k <= j ; k++){ thissum += a[k]; } if(thissum > maxSum){ maxSum = thissum; } } } return maxSum; }
2.较差的时间复杂度O(n^2)
public static int bad(int[] a){ int maxSum = 0; for(int i = 0 ; i < a.length ; i++){ int thissum = 0; for(int j = i ; j < a.length ; j++){ thissum += a[j]; if(thissum > maxSum){ maxSum = thissum; } } } return maxSum; }
3.较好的时间复杂度O(nlogn)
public static int notbad(int[] a,int left,int right){ if(left == right){ if(a[left] > 0){ return a[left]; }else{ return 0; } } int center = (left + right)/2; int maxLeftSum = notbad(a, left, center); int maxRightSum = notbad(a,center+1,right); int maxLeftBorderSum = 0,leftBorderSum = 0; for(int i = center; i >= left; i--){ leftBorderSum += a[i] ; if(leftBorderSum > maxLeftBorderSum){ maxLeftBorderSum = leftBorderSum; } } int maxRightBorderSum = 0 , rightBorderSum = 0; for(int i = center + 1; i <= right; i++){ rightBorderSum += a[i]; if(rightBorderSum > maxRightBorderSum){ maxRightBorderSum = rightBorderSum; } } return max3(maxLeftSum ,maxRightSum , maxLeftBorderSum + maxRightBorderSum); }
4.最好的时间复杂度O(n)
public static int best(int[] a){ int thissum = 0; int maxsum = 0; for(int i = 0 ; i < a.length ; i++){ thissum += a[i]; if(thissum < 0){ thissum = 0; } if(thissum > maxsum){ maxsum = thissum; } } return maxsum; }
相关文章推荐
- 最大子序列和的四种不同复杂度实现
- 最大子列和问题的四种不同时间复杂度的算法实现
- 最大子段和算法 不同复杂度方法实现
- 求最大连续子列和的算法和时间复杂度的分析(包含四种不同时间复杂度的算法)
- 数组连续子序列的最大的和;四种算法,四种时间复杂度
- 最大子序列的3种不同时间复杂度的算法
- HDU1003 Max Sum 最大子序列和的问题【四种算法分析+实现】
- 不同时间复杂度实现最大子段和
- 最大子序列的不同时间复杂度算法
- 求所有最大公共子序列的算法实现
- 最大子序列算法的JAVA实现
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(3) 最大子序列和问题
- c++实现最大子序列和
- OC中字符串的提取与替换-四种不同方法实现
- 动态规划实现最大连续子序列和,最长不下降子序列和最长公共子序列
- 分治法求最大子序列,关于复杂度的一次弱推导
- 算法学习之路:动态规划-最大公共子序列-java实现
- 算法-最长子序列和C/C++实现(三个复杂度)
- 求所有最大公共子序列的算法实现
- 最大子序列的求解分析(java代码实现)