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

2021-10-24 14:40:20 字數 1324 閱讀 2127

題目描述:

給定乙個有 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] 範圍內。

方法1:

主要思路:

(1)先確定 j 的位置,然後再在前後兩端進行判斷是否存在 i 和 k ;

(2)先在前半段確定可能的 i ,既 i 將前半段分成相等的兩份,並使用unordered_set 統計此時的值;

(3)再在後半段確定 k ,此時的 k 要滿足能夠將後半段分成相等的兩份,且此時的值在前半段的unordered _set **現過,返回true;

(4)跳出迴圈,說明沒有找到滿足要求的 i j k,故返回false;

class

solution

int len=nums.

size()

; vector<

int>

pre_sum

(len,0)

;//統計字首和

pre_sum[0]

=nums[0]

;for

(int i=

1;i++i)

//使用 j 進行分割

for(

int j=

3;j++j)

}//判斷後半段是否能夠出現滿足要求的 k

for(

int k=j+

2;k++k)}}

//跳出迴圈,返回false

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,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 輸出 ...