548 將陣列分割成和相等的子陣列

2022-06-20 02:57:08 字數 1112 閱讀 3038

給定乙個有 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 輸出 ...