LintCode: 주식 을 사 는 가장 좋 은 시기 시리즈
2510 단어 LintCode
, i i 。 ( , ), 。
분석: 한 번 만 매매 할 수 있 기 때문에 가격 이 가장 낮은 매입, 가격 이 가장 높 은 판 매 를 선택해 야 한다. 변수 로 가장 작은 매입 치 를 보존 하고 현재 판매 소득 의 이윤 을 얻어 현재 최대 이윤 에 비해 비교적 큰 것 을 선택해 야 한다.
public int maxProfit1(int[] prices) {
int maxProfit=Integer.MIN_VALUE;
int minbuy=Integer.MAX_VALUE;
int len=prices.length;
if(len==0) return 0;
for(int i=0;i
LintCode 150:
, i i 。 。 ( )。 , ( )。
분석: 여러 번 매매 할 수 있 고 배열 을 옮 겨 다 니 며 배열 의 앞 뒤 두 숫자 간 의 차 이 를 계산 할 수 있 습 니 다. 만약 에 0 보다 크 면 profit 에 누적 되 어 한 번 의 매매 로 얻 은 이윤 을 나타 내 고 마지막 에 총 이윤 으로 돌아 갑 니 다.
public int maxProfitII(int[] prices) {
// write your code here
if(prices==null || prices.length==0) return 0;
int diff=0;
int profit=0;
for(int i=0;i0){
profit+=diff;
}
}
return profit;
}
LintCode 151:
묘사 하 다.
만약 에 배열 이 있다 고 가정 하면 그의 i 번 째 요 소 는 주어진 주식 이 i 일 째 가격 이다.알고리즘 을 설계 하여 가장 큰 이윤 을 찾다.너 는 최대 두 건의 거래 를 완성 할 수 있다.
분석: 각각 이전 과 이후 에 앞으로 옮 겨 다 니 며 각각 dp 배열 로 i 일 에 판 매 된 최대 이윤 과 i 일 에 산 최대 이윤 을 저장 하고 마지막 으로 두 dp 배열 을 옮 겨 다 니 며 이 를 더 해 최대 이윤 으로 돌아 가면 된다.
public class Solution {
/**
* @param prices: Given an integer array
* @return: Maximum profit
*/
public int maxProfit(int[] prices) {
// write your code here
if(prices==null||prices.length<=1) return 0;
int[] dp_left=new int[prices.length]; //dp_left[i] i
int[] dp_right=new int[prices.length]; //dp_right[i] i
//
dp_left[0]=0;
int minbuy=prices[0];
for(int i=1;i=0;i--){
max=Math.max(prices[i],max);
dp_right[i]=Math.max(dp_right[i+1],max-prices[i]);
}
int maxProfit=Integer.MIN_VALUE;
for(int i=0;i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
lintcode--94. 두 갈래 나무의 최대 경로와두 갈래 트리를 제시하고 경로와 최대를 찾을 수 있습니다. 경로는 어느 노드에서 시작하고 끝낼 수 있습니다. (경로와 두 노드 사이에 있는 경로의 노드 값의 합) 두 갈래 나무 한 그루를 주시오. 되돌아오다 뒷순서에...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.