제가 하던 질문은 배열에서 중복된 항목을 제거하는 것에 대한 것이었습니다
질문 줄기는 https://leetcode.com/problems...
하던 중 수락했는데 갑자기 생각난 질문이 있는데, 어떻게 해야 할까요? 새 어레이를 열지 않고 수행합니까? 어레이의 경우 원래 어레이의 중복 제거를 완료하고 수정된 어레이를 반환합니까? ?
다음은 제가 통과한 코드입니다
처음에는 마지막에 nums.length를 돌려줄까도 생각했는데 곰곰이 생각해 보니 장난이 아닌데 이렇게 작성하고 나면 수정되지 않은 원래의 nums를 돌려줘야 한다는 생각이 들었습니다. 이 수정된 숫자를 반환하는 방법에 대해 설명했지만 배열 중복 제거에 대한 많은 기사를 읽은 후에도 여전히 답을 찾지 못했습니다. ! ! !
중복물을 현장에서 제거하는 아이디어는 매우 간단합니다
각 배열 요소를 키로 사용하여 해시 개체를 만듭니다
각 요소는 배열에 이미 존재하는지 여부를 해시로 판단합니다
존재하는 경우 해당 요소를 삭제하세요
순회가 완료된 후 배열 요소를 이동하여 간격을 채웁니다.
배열 요소를 이동하는 것은 비용이 많이 드는 작업이므로(예를 들어 N 길이의 배열은 N/2개의 빈 공간으로 고르게 파내므로 요소를 뒤에서 앞으로 이동하는 시간 복잡도는 N^2 수준에 도달할 수 있습니다) , 그리고 이 알고리즘은 현재의 불변 추세를 따르지 않으므로 이 접근 방식은 쓸모가 없으며 일반적인 시나리오에서는 수행할 필요가 없습니다.
이 질문은 단순한 배열 중복 제거가 아닙니다. 이 배열은 정렬되어 있으며 순서가 잘못된 배열의 중복 제거와 다릅니다.
순서 배열 중복 제거에서는 동일한 요소가 함께 배포되므로 중복 제거를 수행하기 위한 순회 프로세스 중에 다음 요소가 이전 요소와 동일한지 여부만 확인하면 됩니다.
이 질문은 당시 제 AC였습니다
으아악const RemoveDuplicates=arr=>Array.from(new Set(arr))