반응형
문제
내 답
- 1시간 제한
- 인터넷 사용 안함
내 코드
class Solution {
public int removeDuplicates(int[] nums) {
if(nums==null ||nums.length==0) return 0;
int temp = -101;
int count=0;
int pos=0;
for(int i=0;i<nums.length;++i){
if(temp!=nums[i]){
temp=nums[i];
nums[pos]=nums[i];
++count;
++pos;
}
}
return count;
}
}
- Time complexity : $O(n)$
- Space complexity : $O(1)$
최선의 답
인터넷과 책에서 찾아본 답
class Solution {
public int removeDuplicates(int[] nums) {
if(nums==null ||nums.length==0) return 0; //널이거나 0이면 0을 리턴
int curIndex = 0;
for (int i = 1; i < nums.length; i++) {
if (nums[curIndex] != nums[i]) {//현재 루프돌고 있는 인덱스의 값과 curIndex 인덱스의 값이 다르면
nums[++curIndex] = nums[i];//루프돌고 있는 인덱스 값을 넣고,curIndex 인덱스를 한칸 이동시킵니다.
}
}
return curIndex + 1;//curIndex는 인덱스 값이므로, 1을 더해서 카운트 값으로 만들어 리턴합니다.
}
}
- Time complexity : $O(n-1)$
- Space complexity : $O(1)$
반성 할 점
- 알고리즘 자체는 괜찮다고 볼수 있지만, 최적화이 조금 부족한듯 느껴집니다.
반응형
'old > Algorithm Solving' 카테고리의 다른 글
Wave Array문제의 자바 해결 방법: 효율적인 알고리즘 (0) | 2023.04.24 |
---|---|
Geekina Loves Order 문제의 자바 솔루션 (0) | 2023.04.05 |
Add Strings 문제풀이 (0) | 2021.09.11 |
Two Sum문제 풀이 (0) | 2021.09.09 |
Count Binary Substrings문제 풀이 (0) | 2021.09.09 |