算法导论(implement the 4.1 alogrithm)

来源:互联网 发布:电子商务美工方向 编辑:程序博客网 时间:2024/06/05 06:52
#include<iostream>#include<vector>#include<string>#include<set>#include<map>#include<unordered_set>#include<unordered_map>#include<algorithm>#include<xfunctional>using namespace std;vector<int> GetMax(vector<int>& diff,int start,int end){vector<int> res;if (start >= end){res.push_back(start);res.push_back(end);res.push_back(diff[start]);return res;}int mid = (start + end) / 2;vector<int> left = GetMax(diff,start,mid);vector<int> right = GetMax(diff,mid+1,end);int max_left = INT_MIN;int left_index;int temp = 0;for (int i = mid; i >= start; i--){temp += diff[i];if (temp > max_left){max_left = temp;left_index = i;}}temp = 0;int max_right = INT_MIN;int right_index;for (int j = mid + 1; j <= end; j++){temp += diff[j];if (temp > max_right){right_index = j;max_right = temp;}}vector<int> middle;middle.push_back(left_index);middle.push_back(right_index);middle.push_back(max_left+max_right);if (middle[2] > left[2] && middle[2] > right[2]) return middle;else if (left[2] > middle[2] && left[2] > right[2]) return left;else return right;}int main(){int n;cout << "The amount of the share:";cin >> n;vector<int> share(n,0);for (int i = 0; i < n; i++){cin >> share[i];}vector<int> diff(n-1,0);for (int i = 0; i < n - 1; i++){diff[i] = share[i+1] - share[i];}vector<int> res = GetMax(diff,0,diff.size()-1);cout << res[0] << " " << res[1] << " " << res[2] << endl;system("pause");return 0;}

When you read my code,you shoule be carefull about the relationship between the index of share and the index of diff
0 0