diff --git a/contains-duplicate/devyejin.py b/contains-duplicate/devyejin.py index 32b66eabb..d5e15b82a 100644 --- a/contains-duplicate/devyejin.py +++ b/contains-duplicate/devyejin.py @@ -1,4 +1,9 @@ -class Solution(object): - def containsDuplicate(self, nums): - return len(nums) != len(set(nums)) +from typing import List +""" +time complexity : O(n) +space complexity : O(n) +""" +class Solution: + def containsDuplicate(self, nums: List[int]) -> bool: + return len(set(nums)) == len(nums) diff --git a/top-k-frequent-elements/devyejin.py b/top-k-frequent-elements/devyejin.py index 8a082da5b..6c11d0c30 100644 --- a/top-k-frequent-elements/devyejin.py +++ b/top-k-frequent-elements/devyejin.py @@ -1,9 +1,16 @@ +""" +time complexity: O(nlogn) +space complexity: O(n) +""" + +from typing import List from collections import Counter -import heapq +from heapq import nlargest + +class Solution: + def topKFrequent(self, nums: List[int], k: int) -> List[int]: + count = Counter(nums) + return [num for num, _ in nlargest(k, count.items(), key=lambda x: x[1])] -class Solution(object): - def topKFrequent(self, nums, k): - counter = sorted(Counter(nums).items(), key=lambda item: -item[1]) - return list(num for num, count in counter[:k]) diff --git a/two-sum/devyejin.py b/two-sum/devyejin.py index be0dc862d..568a98436 100644 --- a/two-sum/devyejin.py +++ b/two-sum/devyejin.py @@ -1,15 +1,12 @@ -class Solution(object): - def twoSum(self, nums, target): +from typing import List - nums_tuple = sorted(list(enumerate(nums)), key=lambda x: x[1]) - left, right = 0, len(nums) - 1 - while left < right: - temp_sum = nums_tuple[left][1] + nums_tuple[right][1] - if temp_sum == target: - return [nums_tuple[left][0], nums_tuple[right][0]] - elif temp_sum < target: - left += 1 - else: - right -= 1 +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + seen = {} + for idx, num in enumerate(nums): + need = target - num + if need in seen: + return [idx, seen[need]] + seen[num] = idx