[Week 6-2] 🔥特集講座2日目
6269 ワード
第6週水曜日個人学習(パスワードチャレンジ)
1からnまでの自然数を含むリストで、2つのエントリ数とゼロのエントリ数を検索して返します.アクセス
リストには1からnまでの数字が含まれている必要があるので、リストの長さ=nです.
欠落した数値を検索するには、指定されたリストを
重複する数を検索するには...?まずは繰り返し
時間複雑度:O(n) コード
もっと良い方法はありませんか?
繰り返しの数を求めるときは、繰り返す必要はなく、より優雅に求めることができるようです.
思いがけない方法
ご利用に!1からnまでの総和で
2番の数字を求めるときは、
時間の複雑さはO(N)ですが、もっとクールです...
[LeetCode 645. Set Mismatch]
1からnまでの自然数を含むリストで、2つのエントリ数とゼロのエントリ数を検索して返します.
Input: nums = [1,2,2,4]
Output: [2,3]
Input: nums = [1,1]
Output: [1,2]
リストには1からnまでの数字が含まれている必要があるので、リストの長さ=nです.
欠落した数値を検索するには、指定されたリストを
set
に変更して、set(1~n)
との差セットを求めます.重複する数を検索するには...?まずは繰り返し
時間複雑度:O(n)
from collections import defaultdict
class Solution:
def findErrorNums(self, nums: List[int]) -> List[int]:
N = len(nums)
origin = set(range(1,N+1))
[missed] = origin - set(nums)
duplicated = -9999
dct = defaultdict(bool)
for n in nums:
if dct[n]:
duplicated = n
break
dct[n] = True
return [duplicated, missed]
もっと良い方法はありませんか?
繰り返しの数を求めるときは、繰り返す必要はなく、より優雅に求めることができるようです.
思いがけない方法
ご利用に!1からnまでの総和で
set(num)
(重複が解消された)の総和を外すと、num
で欠落した数字を求めることができる.2番の数字を求めるときは、
num
の合計からset(num)
の合計を減算すればよい.時間の複雑さはO(N)ですが、もっとクールです...
참고)
멀쩡 : [1, 2, 4, 3, 5]
num : [1, 2, 2, 3, 5]
set : [1, 2, 3, 5]
class Solution:
def findErrorNums(self, nums: List[int]) -> List[int]:
N = len(nums)
total = (N * (N+1)) // 2 # 1~n까지 다 멀쩡한 경우
missing = total - sum(set(nums))
duplicate = sum(num) - sum(set(nums))
return [duplicate,missing]
Reference
この問題について([Week 6-2] 🔥特集講座2日目), 我々は、より多くの情報をここで見つけました https://velog.io/@zeen263/Week-6-2-특강-2일차テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol