这道题思路直接:就是先选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;
}
};
网友评论