题解 | #买卖股票的最好时机(一)#

买卖股票的最好时机(一)

https://www.nowcoder.com/practice/64b4262d4e6d4f6181cd45446a5821ec

//本题用动态规划求解,暴力搜索最简单
//设记忆化数组 为 dp【i】【j】i为天数 j长度为2 【0】【1】 dp代表了i天所持钱数
//0 代表今天不持股 1代表今天持股 

//当今天不持股时 ,有两种情况 : 昨天不持股,或者昨天卖出
//状态转移方程为:dp[i][0] = Math.max[dp[i-1][0],dp[i-1][1] + prices[i]

//当今天持股时。有两种情况:昨天持股,或者昨天不持股,今天买入
//状态转移方程为:dp[i][1] = Math.max(dp[i-1][1], - prices[i]);
import java.util.*;


public class Solution {

    public int maxProfit (int[] prices) {
		//暴力搜索
       /* int ans = 0;
        int max = 0;
        int temp =   0;

        for (int i = 0; i < prices.length; i++) {
            for (int j = i+1; j < prices.length ; j++) {
                temp = prices[j] - prices[i];
                if (temp > max){
                    max = temp;
                }
            }
        }
        ans = max;
        return  ans;*/

		//动态规划
        if (prices.length < 2){
            return 0;
        }

        int[][] dp = new int[prices.length][2];
        int ans = 0;

        dp[0][0] = 0 ;
        dp[0][1] = -1 * prices[0];

        for (int i = 1; i < prices.length; i++) {
            dp[i][0] = Math.max(dp[i-1][0] , dp[i-1][1] + prices[i]);
            dp[i][1] = Math.max(dp[i-1][1], - prices[i]);
            if (dp[i][0] > ans){
                ans = dp[i][0];
            }
        }
        return ans;
    }
}

动态规划题解 文章被收录于专栏

个人动态规划题解合集

全部评论

相关推荐

喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务