오름차순 정렬된 정수(int) 배열이 주어짐. 중복된 숫자들이 있는데 하나씩 남도록 제거해야함. 오름차순은 유지해야함. 추가로 배열을 만들지 않고 풀어야함. 중복제거된 숫자들의 개수를 반환해야함.
나의 첫 시도 방법은 중복된 숫자들만 999로 만들었다. 그리고 정렬하고 반환. 이때 정렬하면서 시간을 많이 잡아 먹게된다.
class Solution {
public int removeDuplicates(int[] nums) {
int temp = -999;
int count = 0;
for(int i = 0; i < nums.length; ++i)
{
if(temp != nums[i])
{
temp = nums[i];
count++;
}
else
nums[i] = 999;
}
Arrays.sort(nums);
return count;
}
}
더 좋은 솔루션을 찾아보니 정렬이 필요없는 방법이다
인덱스 변수 두개를 만들고 첫 인덱스는 nums에 값을 넣기 위한 인덱스
두번째 인덱스는 탐색용 인덱스이다
두번째 인덱스로 탐색하다가 값이 증가할때만 nums[첫인덱스]에 값을 넣는다
class Solution {
public int removeDuplicates(int[] nums) {
int indexforinsert = 0;
for(int indexforsearch = 0; indexforsearch < nums.length; ++indexforsearch)
{
if(indexforsearch == 0 || nums[indexforsearch] > nums[indexforsearch-1])
{
nums[indexforinsert] = nums[indexforsearch];
indexforinsert++;
}
}
return indexforinsert;
}
}