分治与归并
归并算法: 递归+合并,在递归的途中进行分治。递归会把区间越分越小,此时就可以进行分治操作。
可以使用全局变量进行分治操作。
可以在函数中进行分治操作,在递归树中实现pushup和pushdown,记性父节点与子节点的关系计算。
class Solution { public: struct Node { int lsum, rsum, isum, msum; }; Node pushup(Node &a, Node &b) { int isum = a.isum + b.isum; int lsum = max(a.lsum, a.isum + b.lsum); int rsum = max(b.rsum, a.rsum + b.isum); int msum = max(max(a.msum, b.msum), a.rsum + b.lsum); return {lsum, rsum, isum, msum}; } Node get(vector<int> &a, int l, int r) { if(l == r) { return Node{a[l], a[l], a[l], a[l]}; } int mid = l + r >> 1; auto sl = get(a, l, mid), sr = get(a, mid + 1, r); return pushup(sl, sr); } int maxSubArray(vector<int>& nums) { return get(nums, 0, nums.size() - 1).msum; } };