前言
买卖股票最佳时机和最长子数组和类似。暴力算法和动态规划算法几乎如出一辙。一个是前序和小于零时重置当前值,一个是最小值小于当前值时重置为最小值。需关注重置的计算规则和标志。
买卖股票对应leetcode
实现原理
两次循环遍历,略暴力,会超时。固定i的位置,逐步移动j,计算i和j下标对应数据之差。
具体代码实现(暴力)
class Solution {
public int maxProfit(int[] prices) {
int res=0;
for(int i=0;i<prices.length;i++){
for(int j=i+1;j<prices.length;j++){
res=Math.max(prices[j]-prices[i],res);
}
}
return res;
}
}
QA1:能否进行时间优化?
动态规划
初始值:res为0,min=Integer.MAX_VALUE;
状态转移方程:
prices[i]<min,则min=Math.min(min,pric