美文网首页
Split Array with Equal Sum (Leet

Split Array with Equal Sum (Leet

作者: stepsma | 来源:发表于2017-04-28 09:58 被阅读0次

    这道题思路直接:就是先选j,然后将数组分成两部分。同时在每一部分中,一旦找到合适的 i,使得 sum(0, i-1) == sum(i+1, j-1),便用hashset记录下来,然后再来选择k. 同时,建立presum数组,来减少复杂度。数组求连续和题,可以想建立一个presum数组

    class Solution {
    public:
        bool splitArray(vector<int>& nums) {
            if(nums.size() < 7) return false;
            int n = nums.size();
            vector<int> presum(n, 0);
            presum[0] = nums[0];
            for(int i=1; i<n; i++){
                presum[i] = presum[i-1] + nums[i];
            }
            for(int j = 3; j < n - 3; j++){
                unordered_set<int> st;
                for(int i=1; i<j-1; i++){
                    if(presum[i-1] == presum[j-1] - presum[i]){
                        st.insert(presum[i-1]);
                    }
                }
                for(int k = j+2; k<n-1; k++){
                    if(presum[k-1] - presum[j] == presum[n-1] - presum[k]){
                        if(st.count(presum[k-1] - presum[j])) return true;
                    }
                }
            }
            return false;
        }
    };
    

    相关文章

      网友评论

          本文标题:Split Array with Equal Sum (Leet

          本文链接:https://www.haomeiwen.com/subject/pbzjattx.html