今日のLeetCode(8/20)
設問
「Number of Good Pairs」
[1,2,3,1,1,3]
みたいな配列num
について
nums[i] == nums[j]'かつ
i < j'となるペアの数を出す
私の書いたコード
import copy class Solution: def numIdenticalPairs(self, nums: List[int]) -> int: res = 0 for i,j in enumerate(nums): copy_nums = copy.copy(nums) del copy_nums[0:i+1] res += copy_nums.count(j) return res
i < jなので、iよりindexが若いものを消したListを作ってcountしていく。
最初はcopy_nums = nums
と書いていたが、ちゃんとコピーしないともとのnums
からも消されていってしまう…。
ほかのコードを見て
あれ、なんかみんな結構分量書いてる…?
class Solution: def numIdenticalPairs(self, nums): goodPairs = 0 for i, value in enumerate(nums): for j, value2 in enumerate(nums): if i < j and value == value2: goodPairs += 1 print(goodPairs, i, value) return goodPairs
上は単純にnum[i]'と
num[j]'をそれぞれ取ってきて比較しているみたい
ループ回数多いけど忠実な気はする。
class Solution: def numIdenticalPairs(self, nums: List[int]) -> int: usedNums = {} num = 0 for i in nums: if i in usedNums: if usedNums[i] == 1: num +=1 else: num += usedNums[i] usedNums[i] +=1 else: usedNums[i] = 1 return num
listの頭から順にdicに入れていき、同じ番号が入ってきたらdic側をカウントアップして、過去に出てきた回数分numに足していくのね…なるほど…。