[プログラマー]宝石を買う


質問リンク


https://programmers.co.kr/learn/courses/30/lessons/67258

問題の説明

  • 宝石リスト
  • は、1つまたは複数の宝石を含む最短区間リターン
  • を含む.
  • セグメントが複数ある場合、インデックスの最小セグメントは
  • を返す.

    に答える

  • デュアルポインタ
  • start,end初期化
  • を含む
  • 最短区間更新
  • start += 1
  • は含まれていません
  • end += 1
  • 繰り返し
  • に感銘を与える


    初めて
  • を試みた時、私はこの探索で解こうとしたが、
  • に失敗した.
  • はその後、二重ポインタの使用を再試みたが、アルゴリズムはそのままであり、無駄な
  • であった.

    コード#コード#

    def solution(gems):
        answer = [-1, len(gems)]
        total = len(set(gems))
        count = {gems[0]: 1}
        s, e = 0, 0
        while True:
            # 모두 포함
            if len(count) == total:
                if answer[1] - answer[0] > e - s:
                    answer[1] = e + 1
                    answer[0] = s + 1
                if s == len(gems):
                    break
                count[gems[s]] -= 1
                if count[gems[s]] == 0:
                    del count[gems[s]]
                s += 1
            # 모두 포함 X
            else:
                if e+1 == len(gems):
                    break
                if gems[e+1] in count:
                    count[gems[e+1]] += 1
                else:
                    count[gems[e+1]] = 1
                e += 1
        return answer