动态规划
买卖股票的最好时机
http://www.nowcoder.com/questionTerminal/64b4262d4e6d4f6181cd45446a5821ec
这是一个典型的动态规划问题。
最优子结构
在自下而上的递推过程中,我们求得的每个子问题一定是全局最优解,既然它分解的子问题是全局最优解,那么依赖于它们解的原问题自然也是全局最优解。
重复子问题
递归地寻找子问题的最优解时,子问题会重叠地出现在子问题里,会有很多重复的计算,动态规划可以保证每个重叠的子问题只会被求解一次。
动态规划解题步骤:
- 定义子问题
- 写出子问题的递推关系
- 确定DP数组的计算顺序
本题中的具体表现为:
dp[i] i天卖出的最大收益 buy 买进日期 sell 卖出日期 dp[i] = 今天卖出日期-最小买进日期; dp[0] = 0;
题解:
import java.util.*;
public class Solution {
/**
*
* @param prices int整型一维数组
* @return int整型
*/
public int maxProfit (int[] prices) {
// write code here
int res = 0;
int len = prices.length;
int dp = prices[0];
int buy = prices[0];
int sell = prices[0];
for(int i = 1; i < len; i++){
sell = prices[i];
if(sell < buy) buy = sell;
dp = sell - buy;
res = Math.max(dp, res);
}
return res;
}
} 
查看10道真题和解析