https://leetcode.com/problems/remove-duplicates-from-sorted-array/
맨 처음에는 문제가 원하는 바를 이해하지 못해서
'하 이새퀴 뭔소리 하는거야...'
이러면서 문제를 째려보다가 이것 저것 시도해보면서 이해를 했다.
Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The relative order of the elements should be kept the same. Then return the number of unique elements in nums.
Consider the number of unique elements of nums to be k, to get accepted, you need to do the following things:
Change the array nums such that the first k elements of nums contain the unique elements in the order they were present in nums initially. The remaining elements of nums are not important as well as the size of nums.
Return k.
Custom Judge:
The judge will test your solution with the following code:
int[] nums = [...]; // Input array
int[] expectedNums = [...]; // The expected answer with correct length
int k = removeDuplicates(nums); // Calls your implementation
assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
assert nums[i] == expectedNums[i];
}
If all assertions pass, then your solution will be accepted.
Example 1:
Input: nums = [1,1,2]
Output: 2, nums = [1,2,_]
Explanation: Your function should return k = 2, with the first two elements of nums being 1 and 2 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).
Example 2:
Input: nums = [0,0,1,1,1,2,2,3,3,4]
Output: 5, nums = [0,1,2,3,4,_,_,_,_,_]
Explanation: Your function should return k = 5, with the first five elements of nums being 0, 1, 2, 3, and 4 respectively.
It does not matter what you leave beyond the returned k (hence they are underscores).
Constraints:
1 <= nums.length <= 3 * 104
-100 <= nums[i] <= 100
nums is sorted in non-decreasing order.
nums 배열에서 중복된 값을 지워야 한다.
그리고 유니크한 값만 남아있는 nums의 길이를 반환하면 된다.
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
remove = []
ans = nums.copy()
k = 0
for a in ans:
if a not in remove:
remove.append(a)
k += 1
else:
nums.remove(a)
return k
for a in nums라고 하면 nums.remove()하는 순간 전체를 순환하지 못한다.
따라서 ans에 카피하고, 전체 배열 길이를 유지하며 nums를 지웠다.
remove 리스트에 없다는 얘기는 유니크한 값으로 인정받아 K 카운트를 1 증가시킨다.
문제를 이해한 후부터는 어렵지 않은데,
뭔가... 지금까지 풀어본 리트코드 문제 중 규칙이 제일 드러웠다는 느낌이 든다.
많은 도움이 되었습니다, 감사합니다.