자바스크립트 인터뷰 코딩 테스트 문제 2
하루의 주식 데이터에서 최대 수익을 거둘 수 있는 함수를 작성하는 방법에 대해 논의합니다. 간단한 무차별 대입 솔루션과 이 문제에 대한 우아한 솔루션 모두에 대해 논의할 것입니다.
지침
특정 주식의 어제 가격을 연대순 목록으로 액세스할 수 있다고 가정합니다. 목록을 가져와서 어제 주식을 한 번 사고 한 번 매도했을 때 가능한 최대 수익을 반환하는 함수를 작성하세요.
예를 들어 [18, 7, 5, 8, 11, 9]의 주가 목록은 주식이 i8에서 시작하여 시간순으로 숫자를 통해 에서 끝났음을 보여줍니다. 주가 사이에 최소 1분의 차이가 있습니다.
해당 배열을 입력으로 사용하면 함수는 가격이 s일 때 매수하고 가격이 ii일 때 매도할 때 얻을 수 있는 최대 이익인 6을 반환해야 합니다.
수익을 낼 수 없으면 8을 반환합니다.
"공매도"없음 — 매도하기 전에 매수해야 합니다. 동일한 시간 단계에서 구매 및 판매할 수 없습니다.
입력: 숫자 배열
출력: 숫자
힌트
• 이 주식 가격 배열을 가능한 이익으로 전환해야 합니다.
• 이것이 시간순으로 정렬된 목록이라는 사실에 대해 생각하십시오.
function getMaxProfit(prices) {
// Your code here 3
}
해결책
카운트 = 0으로 하자; 2
함수 getMaxProfit(가격) {
const possibleProfits = [];
for(let i = 0; i < 가격.길이; i++) (
for(let j = i; j < 가격. 길이; j++) {
possibleProfits.push(가격[j] - 가격[i]);
카운트++;
return Math.max(...possibleProfits);
}
getMaxProfit([1, 2, 3]);
console.log(수);
}
루프
루프의 두 번째 줄은 필요한 경우 최소 가격을 업데이트합니다.
세 번째 줄은 현재 최소 가격으로 구매하고 현재 가격으로 판매하여 얻은 이익이 현재 최대 이익보다 큰 경우 최대 이익을 업데이트합니다.
결국 우리는 그 최대 이익을 반환합니다.
시간
이번에는 어레이를 한 번만 통과하여 다음과 같은 효율성을 제공합니다.
0(엔)
o(n^2)보다 훨씬 낫습니다.
우주
lDop iteratiDns에서 배열을 생성하거나 값을 저장하지 않습니다. 우리가 추적하는 모든 것은 처음에 선언된 두 변수입니다. 배열 크기에 관계없이 동일한 양의 정보를 유지하므로 공간 복잡도는 다음과 같습니다.
0(1)
우리가 얻을 수 있는 최선입니다.
결론
이것은 면접관을 이길 솔루션입니다. 어렵고, 수와 시간을 논리적으로 다루는 능력을 보여준다. 우아하고 짧고 달콤합니다. 이러한 유형의 문제에 대해 상상할 수 있는 최고의 시간 및 공간 복잡성을 가지고 있습니다.
비판적 사고를 통해 o(n^2) 솔루션을 O(n) 솔루션으로 전환할 수 있는 경우가 있다는 생각을 버리십시오. 때때로 중요한 값을 추적하고 루프에서 업데이트하면 함수 속도가 크게 향상됩니다.
Reference
이 문제에 관하여(자바스크립트 인터뷰 코딩 테스트 문제 2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/stormytalent/javascript-interview-coding-test-problem-2-3obm텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)