題目描述
給你乙個整數陣列 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:
輸出:[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
-10^4 <= a[i] <= 10^4
解題思路
首選算a的累加和能否被3整除,不可以那分不了3等分。
雙指標前後向中間逼近,不用考慮中間那段怎麼分,只要左右兩段累加和等於3等分的數值,中間剩的那段也就找到了。
當然要考慮一種情況【1,-1,1,-1】,這種情況下是分成了兩段,要考慮到
**如下
classsolution
if (sum%3!=0)
boolean flag=false
;
int eachsum=sum/3;
int i=0,j=a.length-1;
int lans=a[0],rans=a[a.length-1];
while (iif (rans!=eachsum)
if (lans==eachsum&&rans==eachsum)
}return flag&&j-i>1;
}}
LeetCode22 括號生成
題幹 給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 演算法思想 先看括號匹配,既然要達到括號匹配,就一定要滿足stack的操作 不多說 則組合數的結果則是卡特蘭數。要輸出正確組合數,可採用遞迴,用兩個變數l,r分別表示剩餘左...
leetcode 22 括號生成
給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 要把這個當成下棋,左括號為黑,右括號為白,則轉換為 3黑3白有幾種排列方式 每一步都有兩個選擇 下黑或者下白,但是場上下白子時剩下的黑子必須比剩下的白子多 比n 2時,有黑白黑白...
leetcode 22 括號生成
給出 n 代表生成括號的對數,請你寫出乙個函式,使其能夠生成所有可能的並且有效的括號組合。例如,給出 n 3,生成結果為 參考官方題解 方法二 回溯法 只有在序列仍然保持有效才會新增 如果還有位置,我們可以開始放乙個左括號。如果不超過右括號數量不超過左括號的數量可以放乙個右括號。class solu...