コーディング面接対策サイトCodilityの練習問題を解いてみた(TapeEquilibrium)
問題
テーブを前半と後半に切断して差分を比較し、最も少ない差分を返す
回答
headにテープの前半部分を、tailにテープの後半部分を格納する。 インデックスを動かすごとにdiffを再計算する。
def solution(a) sum = a.reduce(:+) head = a[0] tail = sum - a[0] min_diff = 10000 for i in 1...a.length diff = (head-tail).abs min_diff = [min_diff, diff].min head += a[i] tail -= a[i] end min_diff end
# debug arr = [3,1,2,4,3] p solution(arr) arr1 = [-1, 1] p solution(arr1)
その他
rubyのreduce知らんかった。。。