题目
描述
假设你有一个数组prices,长度为n,其中prices[i]是股票在第i天的价格,请根据这个价格数组,返回买卖股票能获得的最大收益
1.你可以买入一次股票和卖出一次股票,并非每天都可以买入或卖出一次,总共只能买入和卖出一次,且买入必须在卖出的前面的某一天
2.如果不能获取到任何利润,请返回0
3.假设买入卖出均无手续费
数据范围: 0≤n≤10000,0≤val≤10000
要求:空间复杂度 O(1),时间复杂度 O(n)
思路
动态规划,暴力法,或者记录历史最小值,然后更新最大收益。
代码
python版本:
class Solution:
def maxProfit(self , prices: List[int]) -> int:
# write code here
length = len(prices)
dp = [0]*length
max_d = 0
for i in range(1, length):
for j in range(i):
if(prices[j]<prices[i]):
dp[i] = max(dp[i], prices[i]-prices[j])
max_d = max(max_d, dp[i])
return max_d
c++版本:
class Solution {
public:
/**
*
* @param prices int整型vector
* @return int整型
*/
int maxProfit(vector<int>& prices) {
// write code here
int len = prices.size();
vector<int> dp(len, 0);
int max_d = 0;
for(int i=1; i<len; i++){
for(int j=0; j<i; j++){
if(prices[j]<prices[i]){
dp[i]=max(dp[i], prices[i]-prices[j]);
}
}
max_d = max(max_d, dp[i]);
}
return max_d;
}
};