Remove Duplicates from Sorted Array

블레어(blair)·2020년 6월 22일
1

LeetCode Algorithm Array

목록 보기
1/2
post-thumbnail

Remove Duplicates from Sorted Array

Description

  • 처음에 문제를 잘못 이해해서 다시 푸느라 오래걸린 문제였다.
  • input으로 배열이 주어졌을 때 중복된 원소를 제외한 원소들의 수를 리턴하는 문제인 줄 알았는데. 중복을 제외한 원소들의 nums만큰 기존원소를 잘라서 채점하게 되므로 자리 바꿈이 필요한 문제였다.
  • 예를들어
    • [0, 0, 1, 1, 1, 2, 2, 3, 3, 4] 가 주어지면 => 0,1,2,3,4가 있으므로 5가 return되야하고 기존배열도 앞부분을 [0, 1, 2, 3, 4, 2, 2, 3, 3, 4] 로 바꿔 주어야 한다.
    • 즉 중복되지 않는 원소들의 갯수도 고려해야하고 기존배열의 자리도 바꿔줘야하는 것 이었다.
  • 문제를 푸는 여러 방법이 있겠지만 일단 메모리 공간의 효율을 생각해서 새 배열은 만들지 않는 쪽으로 풀어보았다.

Code

1. 반복문 for문 돌면서 구현

function removeDuplicates1(nums) {
  let tmpPos = 0;

  for(let cur = 0; cur < nums.length; cur++) {
    if(nums[tmpPos] !== nums[cur]) {
      tmpPos++;
      nums[tmpPos] = nums[cur];
    }
  }
  return ++tmpPos
}

2. 고차원 함수 reduce 로 구현

function removeDuplicates2(nums) {

  if (!nums.length) {
    return 0
  }

  let tmpPos = 0;
  let count = nums.reduce((acc, cur, idx, arr) => {

    if (arr[tmpPos] !== cur) {
      acc++;
      arr[++tmpPos] = cur;
    }

    return acc
  }, 1);

  return count;
}

github solution

profile
프론트엔드 개발자 블레어의 개인 블로그 입니다. 개발공부를 하며 나누고 성장하고 싶습니다 :)

0개의 댓글