首页 > 代码库 > 算法之求最大子数组
算法之求最大子数组
最大字数组问题是递归与分治算法中的经典问题:
问题:求一个数组中相加可以获得最大值的子数组,子数组是指原数组中任意连续的一段
代码:
#include <iostream> using namespace std; int max_mid(int *a,int mid,int low,int high) { int ml = a[mid]; int mr = 0; int sum = ml; for(int i = mid-1; i>=low; i--) { sum = sum+a[i]; if(sum>ml) { ml = sum; } } sum = 0; for(int i = mid+1; i<=high; i++) { sum = sum+a[i]; if(sum>mr) { mr = sum; } } return ml+mr; } int max(int *a,int low,int high) { if(low == high) { return a[low]; } else { int mm; int ml; int mr; int mid = (low+high)/2; ml = max(a,low,mid); mm = max_mid(a,mid,low,high); mr = max(a,mid+1,high); if(mm>=ml&&mm>=mr) { return mm; } if(ml>=mm&&ml>=mr) { return ml; } else { return mr; } } } int a[1000]; int main() { int n; while(cin>>n) { for(int i = 0; i<n; i++) { cin>>a[i]; } cout<<max(a,0,n-1)<<endl; } return 0; }
本文出自 “开发者” 博客,请务必保留此出处http://tang1513.blog.51cto.com/7678175/1566341
算法之求最大子数组
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。