解法イメージ
sol1
nums1をループ。nums2に含まれるかチェック。含まれなければ最終リストにappend
これをnums2にもやる
時間計算量o(n^2)
sol2
nums1,2をsetに入れてuniqueを作る。
nums1に対してループ。set2に含まれるかチェックしてなければ最終リストにappend。
これをnums2に対してもやる。
時間計算量o(len(nums1)+len(nums2))
※setに対してループを回せば重複分の判定が不要になる。
コード
class Solution:
def findDifference(self, nums1: List[int], nums2: List[int]) -> List[List[int]]:
set1=set(nums1)
set2=set(nums2)
ans1=[]
ans2=[]
for i in set1:
if i not in set2:
ans1.append(i)
for i in set2:
if i not in set1:
ans2.append(i)
return [ans1,ans2]
改善案
- pythonのsetは集合の差分が取れるのでそれを使うと早い
class Solution:
def findDifference(self, nums1: List[int], nums2: List[int]) -> List[List[int]]:
set1 = set(nums1)
set2 = set(nums2)
n1 = list(set1-set2)
n2 = list(set2-set1)
return [n1,n2]