Code Kata | day10 get_max_area


Q.パラメータheightは数字配列です.グラフィックで表すと、y軸の値であり、高さの値があります.
[1,8,6,2,5,4,8,3,7]を下図に示します.
そのグラフに水があるとき、水を入れることができる最大面積の値を返してください.

▼0回(失敗)


最大ストレージ幅
  • (高さ
  • )
    def get_max_area(height):
      max_area=0
      for y in range(1, max(height)+1):
        lst = [height.index(a) for a in height if a>=y]
        area = y * (lst[-1]-lst[0])
        if area>=max_area:
          max_area = area
      return max_area
    コメント
  • インデックス・メソッドは、重複する値の同じインデックスを返します.
    例)[1,1,1]のすべての1は、最初の1のインデックス0
  • を返します.

    ▼▼▼1回(pass)

    def get_max_area2(height):
      max_area=0
      for y in range(1, max(height)+1):
        lst=[a for a,b in enumerate(height)if b>=y]
        area = y * (lst[-1]-lst[0])
        max_area = max(max_area, area)
      return max_area
    変更index->enumerateを変更して
  • 座標フォーマットを作成
    例)height.index(a)->a foro a,b in enumerate(height)
  • 最大値
  • を格納する論理行に変更
    例)
  • #수정 전
    if area >= max_area:
        max_area = area
       
    #수정 후
    max_area = max(max_area, area)

    ▼▼▼2回(pass)

  • 元の出所から、最高のコードが空輸された...!
  • def get_max_area3(height):
        L, R, width, res = 0, len(height) - 1, len(height) - 1, 0
        for w in range(width, 0, -1):
            if height[L] < height[R]:
                res, L = max(res, height[L] * w), L + 1
            else:
                res, R = max(res, height[R] * w), R - 1
        return res 
    Review
  • 原理:最大横長から横長1マス(高さ1マス)が減少する.
    その時にできる幅(横長*より短い高さ)を求め、最大値を格納、戻します.
  • より少ない場合、数字で答えを出す原理を理解することが重要です.1パックあたり数時間でアイデアが浮かぶとは保証できませんが、いろいろな問題に触れるだけが答えです.