アイデア:
複雑さを軽減するために、ハッシュテーブルを使用します。具体的に:
列挙J:
列挙I、I - 1]和場合==和[J - 1] - 和[i]は、合計するハッシュテーブルを使用する[I - 1]が記録されています。
列挙kは、和[K - 1] - 場合和[J] ==和[N - 1] - 和[k]とハッシュテーブルは和[Kを - 1] - 存在和[j]が、真を返します。
falseを返します。
実装:
1 クラスソリューション 2 { 3 公共: 4 ブール splitArray(ベクトル< INT >&NUMS) 5 { 6 INT N = nums.size()。 7 場合(N < 7)を返す 偽。 8 ベクトル< 整数 >和(N、0 ); 9 和[ 0 ] = NUMS [ 0 ]。 10 のために(int型 I = 1 -和[I] =和[I; iがN <I ++)は1] + NUMS [I]。 11 のために(INT J = 3 - ; J <= N 4 ; J ++ ) 12 { 13 unordered_set < INT > ST。 14 のためには、(int型 i = 1 ; iはJ < - 1 ; iは++ ) 15 { 16 であれば(SUM [I - 1 ] ==和[J - 1 ] -和[i])とst.insert(SUM [I - 1 ]); 17 } 18 のために(INT K = j個の+2 ; K <= N - 2。K ++ ) 19 { 20 であれば(和[K - 1 ] -和[J] ==和[N - 1 ] -和[K] && st.count(和[K - 1 ] - 和[J])) 21 返す 真; 22 } 23 } 24 リターン 偽。 25 } 26 }