일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Git
- 자연어처리
- Kaggle
- programmers
- 캐치카페
- leetcode
- 프로그래머스 파이썬
- 코로나19
- 맥북
- dacon
- PYTHON
- ChatGPT
- gs25
- SW Expert Academy
- 데이콘
- 편스토랑 우승상품
- github
- Baekjoon
- Real or Not? NLP with Disaster Tweets
- 우분투
- 파이썬
- hackerrank
- AI 경진대회
- 프로그래머스
- 백준
- ubuntu
- 금융문자분석경진대회
- 더현대서울 맛집
- Docker
- 편스토랑
- Today
- Total
솜씨좋은장씨
[leetCode] 80. Remove Duplicates from Sorted Array II (Python) 본문
[leetCode] 80. Remove Duplicates from Sorted Array II (Python)
솜씨좋은장씨 2021. 1. 21. 00:50
Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.
Do not allocate extra space for another array; you must do this by modifying the input array in-place with O(1) extra memory.
Clarification:
Confused why the returned value is an integer, but your answer is an array?
Note that the input array is passed in by reference, which means a modification to the input array will be known to the caller.
Internally you can think of this:
// nums is passed in by reference. (i.e., without making a copy) int len = removeDuplicates(nums); // any modification to nums in your function would be known by the caller. // using the length returned by your function, it prints the first len elements. for (int i = 0; i < len; i++) { print(nums[i]); }
Example 1:
Input: nums = [1,1,1,2,2,3]
Output: 5, nums = [1,1,2,2,3]
Explanation: Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3 respectively. It doesn't matter what you leave beyond the returned length.
Example 2:
Input: nums = [0,0,1,1,1,1,2,3,3]
Output: 7, nums = [0,0,1,1,2,3,3]
Explanation: Your function should return length = 7, with the first seven elements of nums being modified to 0, 0, 1, 1, 2, 3 and 3 respectively. It doesn't matter what values are set beyond the returned length.
Constraints:
- 1 <= nums.length <= 3 * 104
- -104 <= nums[i] <= 104
- nums is sorted in ascending order.
Solution
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
index = 0
for num in nums:
if index < 2 or num != nums[index-2]:
nums[index] = num
index = index + 1
return index
Solution 풀이
오름차순으로 정렬되어있는 배열에서 2개이상 중복되는 수가 존재할 경우 중복된 수를 in-place 로 없애는 방법을 구현하는 문제입니다.
index면서 output으로 length를 담당할 변수 ( index )를 하나 선언합니다.
nums에서 숫자 ( num )를 하나씩 꺼냅니다.
만약 index의 값이 0이나 1일 경우 여기까지는 같은 숫자가 존재해도 전혀 문제가 되지 않으므로
nums의 index의 위치에 num을 그대로 넣어줍니다.
그 외의 3번째 부터는 숫자가 세번이상 반복되는지 확인하기 위해 현재 nums에서 나온 num과 nums배열의 index-2번째
즉, 현재 index보다 두 번 전에 존재하는 배열의 값을 비교하여 같지 않은 경우에만 index의 위치에 넣어주도록 합니다.
이 과정마다 계속 index의 값은 1씩 증가하여 최종적으로 index의 값은 최종적으로 중복을 제거한 배열의 길이값이 됩니다.
마지막으로 index값을 return하면 끝!
'Programming > 코딩 1일 1문제' 카테고리의 다른 글
[leetCode] 1636. Sort Array by Increasing Frequency (Python) (0) | 2021.01.23 |
---|---|
[leetCode] 648. Replace Words (Python) (0) | 2021.01.22 |
[leetCode] 1451. Rearrange Words in a Sentence (Python) (0) | 2021.01.20 |
[leetCode] 1592. Rearrange Spaces Between Words (Python) (0) | 2021.01.19 |
[leetCode] 876. Middle of the Linked List (Python) (0) | 2021.01.18 |