[TOC]數組
題目描述:
給定一個整數數組 A
,只有咱們能夠將其劃分爲三個和相等的非空部分時才返回 true
,不然返回 false
。spa
形式上,若是咱們能夠找出索引 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])
就能夠將數組三等分。code
示例 1:
輸出:[0,2,1,-6,6,-7,9,1,2,0,1] 輸出:true 解釋:0 + 2 + 1 = -6 + 6 - 7 + 9 + 1 = 2 + 0 + 1
示例 2:
輸入:[0,2,1,-6,6,7,9,-1,2,0,1] 輸出:false
示例 3:
輸入:[3,3,6,5,-2,2,5,1,-9,4] 輸出:true 解釋:3 + 3 = 6 = 5 - 2 + 2 + 5 + 1 - 9 + 4
提示:索引
3 <= A.length <= 50000
-10000 <= A[i] <= 10000
解法:
class Solution { public: bool canThreePartsEqualSum(vector<int>& A) { int sum_val = 0; for(int val : A){ sum_val += val; } if(sum_val % 3 != 0){ return false; }else{ int one = sum_val /3; int two = one*2; bool first = false, second = false; int pre = 0; for(int val : A){ pre += val; if(pre == one){ first = true; }else if(pre == two && first == true){ return true; } } return false; } } };