diff --git a/contains-duplicate/doh6077.py b/contains-duplicate/doh6077.py index bc14e47f24..11a03c3ca6 100644 --- a/contains-duplicate/doh6077.py +++ b/contains-duplicate/doh6077.py @@ -1,10 +1,7 @@ +# https://leetcode.com/problems/contains-duplicate/description/ -# set에 저장하면서 중복 여부 확인하기 class Solution: - def containsDuplicate(self, nums: list[int]) -> bool: - hashset = set() - for i in nums: - if i in hashset: - return True - hashset.add(i) - return False + def containsDuplicate(self, nums: List[int]) -> bool: + # Create a set to store unique numbers from nums + nums_set = set(nums) + return len(nums_set) != len(nums) diff --git a/longest-consecutive-sequence/doh6077.py b/longest-consecutive-sequence/doh6077.py index 75df1d3fe0..a8ad7a28fe 100644 --- a/longest-consecutive-sequence/doh6077.py +++ b/longest-consecutive-sequence/doh6077.py @@ -1,4 +1,5 @@ # 배열을 정렬하고 포인터를 두개 사용 +""" class Solution: def longestConsecutive(self, nums: List[int]) -> int: if not nums: @@ -32,3 +33,32 @@ def longestConsecutive(self, nums: List[int]) -> int: r += 1 return longest +""" +from typing import List + +class Solution: + def longestConsecutive(self, nums: List[int]) -> int: + if len(nums) <= 1: + return len(nums) + + nums.sort() + r = 1 + curr = nums[0] + count = 1 + max_count = 1 + + while r < len(nums): + if nums[r] == curr: + r += 1 + continue + + if nums[r] == curr + 1: + count += 1 + else: + count = 1 + + curr = nums[r] + max_count = max(max_count, count) + r += 1 + + return max_count diff --git a/top-k-frequent-elements/doh6077.py b/top-k-frequent-elements/doh6077.py index d5d1d11a6a..772861cf66 100644 --- a/top-k-frequent-elements/doh6077.py +++ b/top-k-frequent-elements/doh6077.py @@ -1,12 +1,36 @@ + +# 6기 +# class Solution: +# # dictionary use +# def topKFrequent(self, nums: List[int], k: int) -> List[int]: +# result = {} # key: 원소, value: 등장 횟수 +# for n in nums: +# if n in result: +# result[n] = result[n] + 1 +# else: +# result[n] = 1 + +# # 가장 자주 등장한 원소 k개 반환 +# return sorted(result.keys(), key=lambda x: result[x], reverse=True)[:k] + +# 7기 class Solution: - # dictionary use def topKFrequent(self, nums: List[int], k: int) -> List[int]: - result = {} # key: 원소, value: 등장 횟수 - for n in nums: - if n in result: - result[n] = result[n] + 1 + # 1. Count frequency of each number + freq = {} + + for num in nums: + if num not in freq: + freq[num] = 1 else: - result[n] = 1 + freq[num] += 1 + + # 2. Sort by frequency in descending order + sorted_items = sorted(freq.items(), key=lambda item: item[1], reverse=True) + + # 3. Take the first k elements + result = [] + for i in range(k): + result.append(sorted_items[i][0]) - # 가장 자주 등장한 원소 k개 반환 - return sorted(result.keys(), key=lambda x: result[x], reverse=True)[:k] + return result diff --git a/two-sum/doh6077.py b/two-sum/doh6077.py index 2054ef0def..d8c8a3683a 100644 --- a/two-sum/doh6077.py +++ b/two-sum/doh6077.py @@ -1,8 +1,24 @@ +# 6기 +# class Solution: +# def twoSum(self, nums: list[int], target: int) -> list[int]: +# prevMap = {} # val : index +# for i, n in enumerate(nums): +# diff = target - n +# if diff in prevMap: +# return [prevMap[diff], i] +# prevMap[n] = i + +# 7기 +# https://leetcode.com/problems/two-sum/description/ class Solution: - def twoSum(self, nums: list[int], target: int) -> list[int]: - prevMap = {} # val : index - for i, n in enumerate(nums): - diff = target - n - if diff in prevMap: - return [prevMap[diff], i] - prevMap[n] = i + def twoSum(self, nums: List[int], target: int) -> List[int]: + # use Hash map to save num and index + nums_hm = {} + + for i, num in enumerate(nums): + find_val = target - num + + if find_val in nums_hm: + return [nums_hm[find_val], i] + + nums_hm[num] = i