Leetcode 의 동적 기획 (DP) 주제 - 188. 주식 매매 의 적기 IV (Best Time to Buy and Sell Stock IV)
주식 문제:
121. 주식 매매 의 적기
122. 주식 매매 의 적기 II
123. 주식 매매 의 적기 III
188. 주식 매매 의 적기 IV
309. 가장 좋 은 주식 매매 시 기 는 냉동 기 를 포함한다.
714. 주식 을 매매 하 는 가장 좋 은 시 기 는 수수 료 를 포함한다.
배열 을 지정 합 니 다. i 하나의 요 소 는 주어진 주식 이 제 1 위 에 있다. i 하늘의 가격.
당신 이 얻 을 수 있 는 최대 이윤 을 계산 하기 위해 알고리즘 을 설계 하 세 요.너 는 기껏해야 완성 할 수 있다. k 거래
주의: 너 는 여러 건의 거래 에 동시에 참여 할 수 없다.
예시 1:
: [2,4,1], k = 2
: 2
: 1 ( = 2) , 2 ( = 4) , = 4-2 = 2 。
예시 2:
: [3,2,6,5,0,3], k = 2
: 7
: 2 ( = 2) , 3 ( = 6) , = 6-2 = 4 。
, 5 ( = 0) , 6 ( = 3) , = 3-0 = 3 。
거래 횟수 를 제한 한 주식 문제.
DP 의미:
dp [i] [0] [k] 는 i 일 째 에 수중 에 주식 이 없어 거래 횟수 를 k 회의 최대 이윤 으로 제한 했다 고 밝 혔 다.
dp [i] [1] [k] 는 i 일 째 에 손 에 주식 이 있 고 거래 횟수 를 k 회의 최대 이윤 으로 제한 했다 고 밝 혔 다.
설명:
、 i , , :
1、 i-1 , i ,
2、 i-1 , i
、 i , , :
1、 i-1 , i
2、 i-1 , i
, k>prices.length/2 ,k 。
or k dp 。
。
class Solution {
public int maxProfit(int k, int[] prices) {
if(prices==null || prices.length==0) return 0;
if(k>prices.length/2){
return maxProfit(prices);
}
int[][][] dp = new int[prices.length][2][k+1];
for (int i = 0; i < k+1; i++) {
dp[0][0][i] = 0;
dp[0][1][i] = -prices[0];
}
for (int i = 1; i < prices.length; i++) {
for (int k1 = 1; k1 <= k; k1++) {
dp[i][0][k1] = Math.max(dp[i-1][0][k1],dp[i-1][1][k1]+prices[i]);
dp[i][1][k1] = Math.max(dp[i-1][1][k1],dp[i-1][0][k1-1]-prices[i]);
}
}
return dp[prices.length-1][0][k];
}
public int maxProfit(int[] prices) {
if(prices==null || prices.length==0) return 0;
int[][] dp = new int[prices.length][2];
dp[0][0] = 0;
dp[0][1] = -prices[0];
for (int i = 1; i < prices.length; i++) {
dp[i][0] = Math.max(dp[i-1][1]+prices[i],dp[i-1][0]);
dp[i][1] = Math.max(dp[i-1][0]-prices[i],dp[i-1][1]);
}
return dp[prices.length-1][0];
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.