반응형
주어진 정수 배열 nums는 오름차순으로 정렬되어 있습니다. 각 고유 요소가 최대 두 번 나타나도록 배열에서 중복을 제자리에서 제거하세요. 요소들의 상대적인 순서는 유지되어야 합니다.
일부 언어에서는 배열의 길이를 변경할 수 없으므로, 대신 결과를 배열 nums의 첫 번째 부분에 배치해야 합니다. 더 구체적으로 말하자면, 중복을 제거한 후 k개의 요소가 남아 있다면, nums의 처음 k 요소가 최종 결과를 가져야 합니다. 첫 k 요소 이외의 부분에 무엇이 남아 있는지는 중요하지 않습니다.
최종 결과를 nums의 처음 k 슬롯에 배치한 후 k를 반환하세요.
다른 배열에 대한 추가 공간을 할당하지 마세요. 입력 배열을 제자리에서 수정하여 O(1) 추가 메모리로 이 작업을 수행해야 합니다.
예시 1:
- 입력: nums = [1,1,1,2,2,3]
- 출력: 5, nums = [1,1,2,2,3,_]
- 설명: 함수는 k = 5를 반환해야 하며, nums의 처음 다섯 요소는 각각 1, 1, 2, 2, 3입니다. 반환된 k 이후에는 무엇이 남아 있든 상관없습니다 (따라서 밑줄로 표시됨).
예시 2:
- 입력: nums = [0,0,1,1,1,1,2,3,3]
- 출력: 7, nums = [0,0,1,1,2,3,3,_,_]
- 설명: 함수는 k = 7을 반환해야 하며, nums의 처음 일곱 요소는 각각 0, 0, 1, 1, 2, 3, 3입니다. 반환된 k 이후에는 무엇이 남아 있든 상관없습니다 (따라서 밑줄로 표시됨).
제약 조건:
- 1 <= nums.length <= 3 * 10^4
- -10^4 <= nums[i] <= 10^4
- nums는 비감소 순으로 정렬되어 있습니다.
풀이
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
k = 1 # 초기 값으로 1을 사용하여 첫 번째 숫자는 항상 포함되도록 설정
count = 1 # 각 숫자의 개수를 세기 위해 사용
for i in range(1, len(nums)):
if nums[i] == nums[i - 1]:
count += 1 # 동일한 숫자가 발견되면 개수 증가
else:
count = 1 # 새로운 숫자가 발견되면 개수를 1로 리셋
if count <= 2: # 각 숫자를 최대 두 번까지 허용
nums[k] = nums[i]
k += 1
return k반응형
'알고리즘 문제 > Medium' 카테고리의 다른 글
| [Medium] H-지수- 274. H-Index (0) | 2024.08.16 |
|---|---|
| [Medium] 점프 게임 II - 45. Jump Game II (0) | 2024.08.16 |
| [Medium] 점프 게임 - 55. Jump Game (0) | 2024.08.15 |
| [Medium] 주식을 팔아 최대 이익을 얻는 날 구하기 2 - 122. Best Time to Buy and Sell Stock II (1) | 2024.08.14 |
| [Medium] 배열 회전하기 - 189. Rotate Array (1) | 2024.08.10 |