給定乙個有 n 個整數的陣列,你需要找到滿足以下條件的三元組 (i, j, k) :
0 < i, i + 1 < j, j + 1 < k < n - 1
子陣列 (0, i - 1),(i + 1, j - 1),(j + 1, k - 1),(k + 1, n - 1) 的和應該相等。
這裡我們定義子陣列 (l, r) 表示原陣列從索引為l的元素開始至索引為r的元素。
示例:輸入: [1,2,1,2,1,2,1]
輸出: true
解釋: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
注意:1 <= n <= 2000。
給定陣列中的元素會在 [-1,000,000, 1,000,000] 範圍內。
字首和(陣列和的問題很多都可以用這個方法)加剪枝,關鍵是尋找剪枝的條件:
sum(0,i-1)+sum(i+1,j-1) = sum(j+1,k-1)+sum(k+1,n-1)
=>sum(0,j-1)-nums[i] = sum(j+1,n-1)-nums[k]
=>sum(0,j-1)-sum(j+1,n-1) = nums[i]-nums[k]
=>|sum(0,j-1)-sum(j+1,n-1)| = |nums[i]-nums[k]| <= max-min
bool splitarray(int* nums, int numssize)
int sum_map[numssize+1];
memset(sum_map,0,numssize+1);
int max=nums[0],min=nums[0];
for(int i=0;inums[i]?max:nums[i];
min=min}
for(int j=3;j<=numssize-4;j++)}}
}}
}return false;
}
548 將陣列分割成和相等的子陣列
題目描述 給定乙個有 n 個整數的陣列,你需要找到滿足以下條件的三元組 i,j,k 0 i,i 1 j,j 1 k n 1 子陣列 0,i 1 i 1,j 1 j 1,k 1 k 1,n 1 的和應該相等。這裡我們定義子陣列 l,r 表示原陣列從索引為l的元素開始至索引為r的元素。示例 輸入 1,2...
將陣列分成和相等的三個部分
給你乙個整數陣列 a,只有可以將其劃分為三個和相等的非空部分時才返回 true,否則返回 false。形式上,如果可以找出索引 i 1 j 且滿足 a 0 a 1 a i a i 1 a i 2 a j 1 a j a j 1 a a.length 1 就可以將陣列三等分。class solutio...
LeetCode 22 將陣列分成和相等的三個部分
題目描述 給你乙個整數陣列 a,只有可以將其劃分為三個和相等的非空部分時才返回 true,否則返回 false。形式上,如果可以找出索引 i 1 j 且滿足 a 0 a 1 a i a i 1 a i 2 a j 1 a j a j 1 a a.length 1 就可以將陣列三等分。示例 1 輸出 ...