Crushing Job Interviews(DSA) - 정렬된 제곱 배열
질문
난이도: 매체의 종류
오름차순으로 정렬된 비어 있지 않은 정수 배열을 가져와 원래 정수의 제곱도 오름차순으로 정렬된 동일한 길이의 새 배열을 반환하는 함수를 작성하세요.
샘플 입력
array = [1, 2, 3, 5, 6, 8, 9]
샘플 출력
[1, 4, 9, 25, 36, 64, 81]
최적의 공간 및 시간 복잡성:
O(n) 시간 | O(n) 공간 - 여기서 n은 입력 배열의 길이입니다.
생각
면접관에게 주어진 원래 배열을 변경할 수 있는지 또는 중복 배열을 만들어야 하는지 물어보는 것이 중요합니다.
따라서 이를 해결하는 두 가지 방법이 있습니다. 첫 번째는 다음과 같습니다.
이 솔루션은 간단하지만 더 잘할 수 있습니다.
두 번째 솔루션에서는 포인터를 사용합니다.
P.S: Pointers in arrays context are used to keep track of the position while iterating through it.
따라서 우리가 할 일은 다음과 같습니다.
혼란스럽나요? 그렇긴 한데 코드를 한 번 보면 이해가 더 잘 되실 거라 확신합니다. 첫 번째 솔루션은 매우 간단하고 솔루션을 쉽게 생각해 낼 수 있다고 믿기 때문에 기록하지 않을 것입니다. 그래도 원하신다면 댓글 달아주시면 올려드리겠습니다.
솔루션(2차)
function sortedSquaredArray(array) {
const toReturn = [...array]
let smallerValueIdx= 0
let largerValueIdx = (array.length) - 1
for (let idx = array.length - 1; idx >=0; idx--) {
const smallerVal = array[smallerValueIdx]
const largeVal = array[largerValueIdx]
if (Math.abs(smallerVal) > Math.abs(largeVal)) {
toReturn[idx] =smallerVal * smallerVal
smallerValueIdx++
}
else{
toReturn[idx] = largeVal * largeVal
largerValueIdx --
}
}
return toReturn;
}
의심의 여지가 있습니까? 더 나은 솔루션이 있습니까? 아래에 의견을 남기고 토론을 시작합시다.
코딩에 대한 더 멋진 콘텐츠를 보려면 인스타그램에서 나를 팔로우하세요.
Reference
이 문제에 관하여(Crushing Job Interviews(DSA) - 정렬된 제곱 배열), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dhruvindev/crushing-job-interviewsdsa-sorted-squared-arrays-1np9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)