[Quetion]
- 리스트 내에서 연속된 수의 최대 개수 반환
Hashmap을 활용하는 문제이지만 우선 바로 생각나는대로 풀어보았다.
생각의 흐름은 다음과 같다.
class Solution:
def longestConsecutive(self, nums):
# nums가 없으면 0
if not nums:
return 0
# 중복제거 & 정렬
nums = sorted(set(nums))
n = nums[0]
# 연속된 수의 개수 저장
count = 0
# 연속이 끊겼을 때, 연속되었던 수 저장
max_c = []
for i in range(1,len(nums)):
if n+1 == nums[i]:
count+=1
else:
max_c.append(count+1)
count=0
n = nums[i]
max_c.append(count+1)
max_c.sort()
return max_c[-1]
Runtime: 335ms | Memory: 30.9MB
LeetCode 코드 중 Runtime 99%, Memory 87% 해당하는 결과
해당 코드의 시간복잡도는 nums의 중복을 제거하여 O(nlogn)이고 최악은 중복이 없는 경우의 O(N)이다. 공간복잡도는 중복을 제거후, 정렬된 새로운 리스트를 생성하는 과정에서 O(N)이다.
현재 코드에서는 max_c 리스트에 연속되는 개수를 저장하는 방법으로 최대 연속 개수를 판단하지만, max()함수를 활용해서 하나의 변수를 최대값으로 갱신하는 것으로도 결과를 도출할 수 있을 것이라 생각했다.
다른 솔루션들도 중복을 제거, 정렬하는 방법으로 접근을 했고, 굳이 dictionary 자료구조를 활용한 솔루션은 거의 없던 것 같다. 현재 코드가 성능도 어느정도 좋게 나왔고, 코드 흐름도 파악하기 쉽다고 생각하여 추가 변경은 하지 않았다.