現在給你兩個長度均為n的整數陣列 a 和 b。
當(a[0]+...a[k-1]),(a[k]+...+a[n-1]),(b[0]+...+b[k-1]) 和 (b[k]+...+b[n-1])四個和值大小相等時,稱索引k是乙個公平索引。也就是說,索引k 可以使得a, b 兩個陣列被分成兩個非空陣列,這四個子陣列的和值相等。
例如,陣列a = [4,-1,0,3],b = [-2,5,0,3],那麼索引 k = 2是公平的,子陣列的和相等:4+(-1) = 3; 0+3 = 3; -2 + 5 = 3 and 0 + 3 = 3。
現在請你計算公平索引的個數。
樣例 1:
輸入: [4,-1,0,3] [-2,5,0,3]
輸出: 2
樣例 2:
輸入: [2,-2,-3,3]
[0,0,4,-4]
輸出: 1
樣例 3:
輸入: [4,-1,0,3] [-2,6,0,4]
輸出: 0
樣例 4:
輸入: [1,4,2,-2,5] [7,-2,-2,2,5]
輸出: 2
【題解】
先判斷兩個陣列總和是否相等,若不相等,則直接返回0;
然後掃一遍陣列,用pre_a和pre_b分別記錄兩個陣列的字首和,字首和相等並且等於剩餘的部分的時候時ans++即可。
需要注意的是,陣列中數的值在[-1e9,1e9]範圍內,陣列長度[0,1e5],所以中間和會超出int範圍,需要用long;
還有被分成的兩個陣列不能為空,所以字首和p[0]和p[n-1]是不考慮的;
public
class
solutionif(
sum_a
!=sum_b
)return0;
for(
inti=0
;isize()-
1;i++)
return
ans;
}}
更多語言**參見:九章演算法
九章演算法 蘇州微軟面試題 程式檢查
描述 有一種程式語言,只有以下五種命令,每種命令最多有兩個引數,請檢查給定的程式是否可能無限迴圈。這些命令分別是 label 宣告乙個標籤,引數是乙個字串,且每個標籤只宣告一次。goto 跳轉到乙個標籤,並從標籤處開始按順序執行程式。halt 停機,程式終止。gotorand 隨機跳轉到兩個標籤中的...
九章演算法 微軟面試題 加熱器
描述 冬天來啦!你的任務是設計出乙個具有固定加熱半徑的加熱器,使得所有房屋在這個冬天不至於太冷。現在你能夠獲知所有房屋和加熱器所處的位置,它們均分布在一條水平線中。你需要找出最小的加熱半徑使得所有房屋都處在至少乙個加熱器的加熱範圍內。所以,你的輸入將會是所有房屋和加熱器所處的位置,期望輸出為加熱器最...
九章演算法 微軟面試題 騎士撥號器
西洋棋中的騎士可以按下圖所示進行移動 每當它落在乙個鍵上 包括騎士的初始位置 都會呼出鍵所對應的數字,總共按下n位數字。你能用這種方式呼出多少個不同的號碼?因為答案可能很大,所以輸出答案模 10 9 7。1 n 5000 樣例 1 輸入 1 輸出 10 說明 答案可能是0,1,2,3,9,樣例 2 ...