栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java描述 LeetCode,122. Best Time to Buy and Sell Stock II(买卖股票的时机II)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java描述 LeetCode,122. Best Time to Buy and Sell Stock II(买卖股票的时机II)

1-1:题目

You are given an integer array prices where prices[i] is the price of a given stock on the ith day.

On each day, you may decide to buy and/or sell the stock. You can only hold at most one share of the stock at any time. However, you can buy it then immediately sell it on the same day.

Find and return the maximum profit you can achieve.

Example 1:

Input: prices = [7,1,5,3,6,4]
Output: 7
Explanation: Buy on day 2 (price = 1) and sell on day 3 (price = 5), profit = 5-1 = 4.
Then buy on day 4 (price = 3) and sell on day 5 (price = 6), profit = 6-3 = 3.
Total profit is 4 + 3 = 7.

Example 2:

Input: prices = [1,2,3,4,5]
Output: 4
Explanation: Buy on day 1 (price = 1) and sell on day 5 (price = 5), profit = 5-1 = 4.
Total profit is 4.

Example 3:

Input: prices = [7,6,4,3,1]
Output: 0
Explanation: There is no way to make a positive profit, so we never buy the stock to achieve the maximum profit of 0.

Constraints:

1 <= prices.length <= 3 * 104
0 <= prices[i] <= 104

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii

1-2:idea

我自己没写出来,没有思路。可能是我做的还是太少了。再积累点。。
这边直接给看官方答案好了。

1-3:代码:
public static int maxProfit(int[] prices) {
    int n = prices.length;
    int[][] dp = new int[n + 1][2]; // dp[i][0] 代表第i天持有票的收入,dp[i][1] 代表第i天不持有股票第收入。

    dp[1][0] = -prices[0]; // 第一天持有股票,第一天花钱买入了。
    dp[1][1] = 0; // 第一天不持有股票

    for (int i = 2; i < n + 1; i++) {
        dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i - 1]);
        dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] + prices[i - 1]);
    }
    return Math.max(dp[n][0], dp[n][1]);
}

public static int maxProfit2(int[] prices) {
    int n = prices.length;

    int have = -prices[0];
    int notHave = 0;

    for (int i = 2; i < n + 1; i++) {
        have = Math.max(have, notHave - prices[i - 1]);
        notHave = Math.max(notHave, have + prices[i - 1]);
    }

    return Math.max(have, notHave);
}
1-4:总结

今天两道力扣,只写出了一道,哈哈哈,还需要努力啊,加油呀,河海哥。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/356434.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号