【C++】数组的最大子数组
发布时间:2020-12-14 04:38:01 所属栏目:百科 来源:网络整理
导读:我已无法用语言来描述递归有多牛逼。 ? ? ? ? #includeiostream #include vector #include algorithm using namespace std; int max_sub_array(vector int data, int left,1)">int right); int max_crossing_sub_array(vector int mid,1)"> right); main(){
我已无法用语言来描述递归有多牛逼。 ? ? ? ? #include<iostream> #include<vector> #include<algorithm> using namespace std; int max_sub_array(vector<int>& data,int left,1)">int right); int max_crossing_sub_array(vector<int mid,1)"> right); main() { vector<int> data = { 3,0,1)">5,1)">2,1)">7,1)">8,1)">9,1)">6,1)">1 }; //获取序列元素个数 int length = 9; int left = 0int right = 8int sum = ; sum = max_sub_array(data,left,right); cout << sum << " "; } int> &data,1)"> right) { if (left >= right)因为这个时候表示已经分解到只剩一个元素了,就是递归的终止条件,子数组的最大值就是元素本身,返回 { return data[left]; } else { 将序列一分为二获取中间位置 int mid = (left + right) / 2; int max_left,max_right,max_cross,Smax;用来存储子数组的和 分治 max_left = max_sub_array(data,mid);左边子数组的和 max_right = max_sub_array(data,mid + 1,right);右边子数组的和 合并 max_cross = max_crossing_sub_array(data,mid,1)">跨越中心的子数组的和 Smax = max(max(max_left,max_right),max_cross); Smax; } } int left_max = -99999;不可能达到的一个数 int right_max = -99999/*计算以mid结尾的最大的子数组和,左边子数组*/ for (int i = mid; i >= left; --i) { sum += data.at(i); if (sum > left_max) left_max = sum; } sum = 计算以mid+1开始的最大的子数组和,右边子数组int i = mid + 1; i <= right; ++ right_max) right_max = sum; } return left_max + right_max; } ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |