https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
类似题目:
使用2016这道题的解法
class Solution {
// 找队列中两个数的最大差值
public int maxProfit(int[] prices) {
int length=prices.length;
int ans=0;
//维持一个最小数组
int val = (int)Math.pow(10,4);
for(int i=0;i<length;i++){
ans = Math.max(ans,prices[i]-val);
val = Math.min(val,prices[i]);
}
//这一题没有要求,结果一定是要大于0的,所以,当结果小于0时,可以返回0
//2016那道题,因为必须结果是大于0的,所以结果如果不大于0,那么就返回-1
return ans;
}
}
思路:动态规划
找到差值最大的两个数,然后返回最大差值
一般会用到一些函数
C++
采用暴力法,会超时
动态规划
class Solution {
public int maxProfit(int[] prices) {
int[] dp = new int[prices.length];
dp[0]=0;
int minprice=prices[0];//minprice代表历史最低价格,
// 所以i从1开始历史最低价格肯定是prices[0]
for (int i = 1; i < prices.length; i++) {
dp[i]=Math.max(dp[i-1],prices[i]-minprice);
minprice=Math.min(minprice,prices[i]);
}
return dp[prices.length-1];
}
}