
JavaScript LeetCode 주식을 사고 팔기 가장 좋은 시간
2022-10-19 last update
7 minutes reading datastructures javascript coding leetcode즉각적인
price[i]가 i번째 날에 주어진 주식의 가격인 배열 가격이 주어집니다.
한 주식을 사는 날을 선택하고 그 주식을 팔기 위해 미래의 다른 날을 선택하여 이익을 최대화하려고 합니다.
이 거래에서 얻을 수 있는 최대 이익을 반환합니다. 이익을 얻을 수 없으면 0을 반환합니다.
예 1:
Input: prices = [7,1,5,3,6,4]
Output: 5 Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5. Note that buying on day 2 and selling on day 1 is not allowed because you must buy before you sell.
문제 분석
이전 문제와 마찬가지로 첫 번째 명백한 솔루션은 무차별 대입 솔루션을 사용하는 것입니다. 여기서 우리는 배열을 두 번 반복하여 모든 후속 값 사이의 모든 빼기를 확인하고 가장 높은 이익을 얻습니다.
이에 대한 시각적 예는 다음과 같습니다.
첫 번째 솔루션
계속해서 위에서 언급한 코드를 작성해 보겠습니다.
function maxProfit(prices) {
let profit = 0;
for (let i = 0; i < prices.length - 1; i++) {
for (let j = i + 1; j < prices.length; j++) {
const currentProfit = prices[j] - prices[i]
if (currentProfit > profit ) {
profit = currentProfit
}
}
}
return profit;
}
여기에서 배열의 다음 요소의 가격을 현재와 비교합니다. 이것을 개념화하는 가장 좋은 방법은 i가 인덱스이고 j가 반복을 계속하는 포인터라는 것입니다.
최대 이익을 찾기 위해 두 개의 for 루프를 사용합니다. 이것은 O(n^2)의 복잡도를 가질 것입니다. 이것은 매우 느리기 때문에 꽤 큰 문제입니다! 그러나 어레이를 한 번만 반복하여 이를 최적화할 수 있습니다.
두 번째 솔루션
그러나 단일 반복은 어떻게 생겼습니까?
코드를 사용하면 다음과 같이 보일 것입니다.
var maxProfit = function(prices) {
let profit = 0;
let stockToBuy = prices[0];
for(let i = 1; i < prices.length; i++) {
if (stockToBuy > prices[i]) {
stockToBuy = prices[i]
}
const currentProfit = prices[i] - stockToBuy;
if (currentProfit > profit) {
profit = currentProfit;
}
}
return profit;
};
배열의 첫 번째 요소에서 초기 stockToBuy를 가져옵니다. 그런 다음 배열에 대해 반복을 시작할 수 있습니다(첫 번째 건너뛰기). 다음 주식이 현재 선택한 주식보다 높은 가격인지 비교합니다. 그렇다면 더 높은 수익을 얻을 수 있으므로 전환합니다.
그러나 이것은 재설정 메커니즘으로도 사용됩니다. 주식의 가치가 더 높으면 이 시점부터 이전에 선택한 주식보다 더 높은 이익을 얻지 못할 것이라는 것을 알고 있습니다.
stockToBuy = prices[i]
그런 다음 새로운 currentProfit을 계산합니다. 이것은 현재 반복의 임시 값일 뿐입니다.
const currentProfit = prices[i] - stockToBuy;
그런 다음 for 루프 외부에 저장한 값과 비교합니다. 더 높으면 그것이 바로 우리가 원하는 것입니다.
처음에는 0으로 변수를 만들었으므로 이익을 찾지 못하면 그대로 반환할 수 있습니다.
욕심 많은 알고리즘
그런데 이것을 무엇이라고 합니까?
여기서 우리가 하고 있는 것은 모든 반복에서 최상의 옵션을 선택하고 과거 선택을 잊어버리는 것입니다. 이것을 탐욕 알고리즘이라고 합니다.
더 자세히 읽고 싶다면 여기Wikipedia article가 있습니다.
연결하자
이것이 마음에 들면 언제든지 저와 연결하거나
내 newsletter 에서 무료 개발자 로드맵과 주간 기술 산업 뉴스를 확인하십시오.