leetcode初级算法练习题-买卖股票的最佳时机 II

丑话说在最前面:股市有风险!股市有风险!股市有风险!股市有风险!股市有风险!股市有风险!

题目

买卖股票的最佳时机 II
给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x2zsx1/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

一、分析

先分析下一共会有的情况:1是股票价格涨跌,2是你当时有没有买股票。

结合起来一共就是4种:

1)股票要跌,你没买,皆大欢喜。

2)股票要跌,你之前买了,赶紧卖。

3)股票要涨,你没买,买它买它买它!

4)股票要涨,你之前买过了。(需要判定是否到边界)

5)总结就是今天这个价格买不买,要看明天涨不涨(现实中要有这个本事,也不会被叫韭菜了),明天能涨,那我们就今天买,明天卖,题目规定可以多次买卖(现实中这是要交手续费、印花税的),所以就这么个简单逻辑就行。

二、代码

/**
 * 买卖股票的最佳时机 II
 * 给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。
 * 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
 * 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)
 */
public class LcLearn02 {
    public static void main(String[] args) {
        //7, 1, 5, 3, 6, 4
        //1,2,3,4,5
        //7,6,4,3,1
        int[] a = new int[]{1, 2, 3, 4, 5};
        int sum = 0;//利润
        boolean isBuy = false;//是否已购买股票
        int money = 0;//已购买股票金额
        for (int i = 0; i < a.length - 1; i++) {
            if (a[i] < a[i + 1]) {//涨价
                if (!isBuy) {//之前没买过
                    System.out.println("要涨,买入价" + a[i]);
                    isBuy = true;
                    money = a[i];
                } else {//之前买过了
                    if (i + 1 == a.length - 1) {//明天世界末日了,套现潇洒过最后一天
                        System.out.println("明天世界末日,潇洒去");
                        sum += (a[i + 1] - money);
                    }
                }
            } else {//跌
                if (!isBuy) { //没买过股票,内心平静
                    System.out.println("要跌,不动");
                } else { //已买过股票,明天要跌,赶紧出手
                    System.out.println("要跌了,再不卖就亏了" + a[i]);
                    sum += (a[i] - money);
                    money = 0;//卖出股票 清空金额
                }
            }
        }
        System.out.println("赚到" + sum);
    }
}

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值