てくてくテック

【LeetCode】414. Third Maximum Number

leetcode

414. Third Maximum Number

どーも!

たかぽんです!

今回は以下の問題です!

問題は至って簡単で、数字が入った配列が渡されるため、その中から3番目に大きな値を返せ...というものです。

[1,2,3]

であれば、3番目に大きい値は1となります。

ただし...!

もし3番目に大きい物が無い場合は最も大きな値を返す必要があります。

[1,2]

なら、2となります。

さらに、重複がある場合は同一の値として判定します。

[1,2,2,3]

であれば、[1,2,3]と同じと考えて良いため、3番目に大きな値は1となります。

では...!

アルゴリズムを簡単に考えます。

アルゴリズム

アルゴリズムの検討をしていきます。

とはいっても、pythonの便利関数をガッツリ使っていく形で...

まず配列の中の重複をsetメソッドを使って消してあげます。

そして、その中をソートすると、左側が若い番号、右側が大きな値になります。

末尾から三つ手前の要素を取得すればいいのですが、わかりやすいようにreverseをかけて、先頭が最も大きな値、末尾が小さな値にしてから3番目の要素を取り出します。

その際、もし重複をのぞいた配列の要素数が3よりも小さい場合は0番目(最も大きな値)を返してあげます。

以上がざっくりとしたアルゴリズムです。

言葉だけだと難しいと思うの、最後に提出したコードを置いておきます。

参考にしてみてください。

提出したコード

class Solution:
    def thirdMax(self, nums: List[int]) -> int:
        ListedNums = list(set(nums))
        ListedNums.sort()
        ListedNums.reverse()
        if len(ListedNums) < 3:
            return ListedNums[0]
        return ListedNums[2]

## 結果
Runtime: 48 ms, faster than 89.12% of Python3 online submissions for Third Maximum Number.
Memory Usage: 15.9 MB, less than 26.00% of Python3 online submissions for Third Maximum Number.
モバイルバージョンを終了