python 주식 매매 의 가장 좋 은 시기(욕심/만력 알고리즘 기반)
제목 요구
배열 을 지정 합 니 다.그 i 번 째 요 소 는 주어진 주식 의 i 일 째 가격 입 니 다.
당신 이 얻 을 수 있 는 최대 이윤 을 계산 하기 위해 알고리즘 을 설계 하 세 요.너 는 가능 한 한 더 많은 거래 를 완성 할 수 있다.
주의:당신 은 여러 가지 거래 에 동시에 참여 할 수 없습니다.
이 문 제 를 보 니 최초의 생각 은 만력 법 이 었 다.
2 층 순환 을 통 해 서로 다른 날 간 의 이윤 과 이윤 을 끊임없이 계산 하 다.
아래 위 코드
class Solution(object):
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
self.allbuy1 = [] # ( )
self.allbuy2 = [] # ( )
# allbuy1 allbuy2
self.curbuy(prices,0,0) #prices 0: 0:
#print(self.allbuy1)
#print(self.allbuy2)
return self.picBigest(self.allbuy2)
def buyticket(self,prilist,a,b): #list: a: b:
return prilist[b] -prilist[a] #
def curbuy(self,plist,x,result): #plist: x: result:
obj=result #
lens=len(plist) #
for i in range(x,lens-1):
for j in range(i+1,lens):
temp=self.buyticket(plist,i, j)
self.allbuy1.append(temp)
self.allbuy2.append(temp) #
result = obj + temp #
if(x>=2): # 2+1
self.allbuy2.append(result) #
self.curbuy(plist,j+1,result) # j+1: result:
def picBigest(self,reslist):
big=0
for i in reslist:
if (i>big):
big=i
print(big)
return big
if __name__ == '__main__':
test=Solution()
prices = [5,7,3,8] #
test.maxProfit(prices)
분석:이 코드 는 이해 하기 쉬 운 것 은 모든 가능성 을 배열 에 넣 고 가장 큰 가능성 을 찾 는 것 이다.
이 코드 를 제출 할 때 시간 제한 을 초과 한 것 을 표시 합 니 다.
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
생각 바 꾸 기:욕심 산법 으로 이 일 을 해결 합 니 다.
먼저 욕심 산법 을 소개 합 니 다.문 제 는 현재 상황 만 최 적 으로 처리 하고 그 후에 어떤 일이 발생 하 더 라 도 이전의 결정 에 변 하지 않 습 니 다.쉽게 말 하면 국부 적 으로 가장 잘 풀 리 는 과정 이다.
거스름돈 문제
액면가 가 5 원,2 원,1 원,5 각,2 각,1 각 인 화폐 가 있다 고 가정 하면 고객 에 게 4 원 6 각 의 현금 을 찾 아 주 고 지불 한 화폐의 수량 을 최소 화해 야 한다.
먼저 4 원 6 각 이하 의 최대 액면가(2 원)를 찾 아 라4.567917.그 다음 에 2 원 6 각 이하 의 최대 액면가(2 원)를 찾 아 라이 어 6 각 이하 의 최대 액면가(5 각)를 찾 아 냈 다.
4.567917.마지막 으로 1 각 이하 의 최대 액면가(1 각)를 찾 아 4 장의 지 폐 를 지불한다.
욕심 산법 을 소개 하고 간단 한 사상 을 이용 하여 대응 문 제 를 해결 하 다.
주식 가격 동향 을 이미 알 고 있 는 상황 에서 다음 날 만 판단 해 야 한다.
그럼요.제 가 안 팔 고 며칠 있다 가 팔 거나 안 사 거나 며칠 있다 가 살 수 있 는 방식 으로 성장 을 유지 할 수 있다 는 의견 이 있 을 거 예요.
다음날 3 일 매입 하고 4 일 매도 하고 5 일 매입 하면 A+B
다음 날 5 일 매입 하면 매출 수익 은 C.
분명히 A+B 가 C 보다 크 기 때문에 욕심 법 은 이런 상황 에서 매우 적용 되 고 가장 좋 은 결 과 를 얻 을 수 있 을 것 이다.
직접 코드
class Solution(object):
def maxProfit(self, prices):
profit = 0
for day in range(len(prices)-1):
differ = prices[day+1] - prices[day]
if differ > 0:
profit += differ
return profit
if __name__ == '__main__':
test=Solution()
prices = [5,7,3,9] #
print(test.maxProfit(prices))
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.