LeetCode刷题实战548:将数组分割成和相等的子数组
共 1441字,需浏览 3分钟
·
2022-03-10 17:13
示例
Input: [1,2,1,2,1,2,1]
Output: True
Explanation:
i = 1, j = 3, k = 5.
sum(0, i - 1) = sum(0, 0) = 1
sum(i + 1, j - 1) = sum(2, 2) = 1
sum(j + 1, k - 1) = sum(4, 4) = 1
sum(k + 1, n - 1) = sum(6, 6) = 1
解题
class Solution {
public:
bool splitArray(vector<int>& nums) {
if(nums.size()<7){
return false;
}
int len=nums.size();
vector<int>pre_sum(len,0);
//统计前缀和
pre_sum[0]=nums[0];
for(int i=1;ipre_sum[i]=pre_sum[i-1]+nums[i];
}
//使用 j 进行分割
for(int j=3;j-3;++j){
unordered_set<int> st;
//统计前半段可能出现的分割值
for(int i=1;i-1;++i){
if(pre_sum[i-1]==pre_sum[j-1]-pre_sum[i]){
st.insert(pre_sum[i-1]);
}
}
//判断后半段是否能够出现满足要求的 k
for(int k=j+2;k-1;++k){
if(pre_sum[k-1]-pre_sum[j]==pre_sum[len-1]-pre_sum[k]&&st.count(pre_sum[k-1]-pre_sum[j])){
return true;
}
}
}
//跳出循环,返回false
return false;
}
};