HackerRank - Equal Stacks


Harker RankのEqual Stacks題です

質問:



スタックが3つある場合:
これは、すべてのスタックが同じ高さの最大高さを持つことを要求する問題です.
与えられた例では、最大高さは5です.

マイコード:

def equalStacks(h1, h2, h3):
    # Write your code here
    stacks = [h1,h2,h3]
    each_sum = [sum(h1), sum(h2), sum(h3)]
    
    while min(each_sum) != max(each_sum):
        mm = min(each_sum)
        for i in range(3):
            if each_sum[i] == mm: continue
            each_sum[i] -= stacks[i].pop(0)
    
    return min(each_sum)

プール:


スタックをリストに結合します.
リスト内のすべての値が同じになるまで(minとmaxが同じになるまで)
最小のスタックを除いてスタックから1つ抽出されました

その他のコード:


これはHackerRankのctrs 1のコードです
def equalStacks(h1, h2, h3):
    s1, s2, s3 = map(sum, (h1, h2, h3))
    while h1 and h2 and h3:
        m = min(s1, s2, s3)
        while s1 > m: s1 -= h1.pop(0)
        while s2 > m: s2 -= h2.pop(0)
        while s3 > m: s3 -= h3.pop(0)
        if s1 == s2 == s3: return s1
    return 0

比較:


私のコードを比較してみます.
コアアイデアは似ていますが、ctrs 1のコードはもっと有効です.
スタックから1つ取り出すたびに、最小値が計算されます.
このコードが最小値以下になるまでポップアップします.
また、mapでsumを求める方法ももっと洗練されているようです.