赞
踩
买卖股票的最佳时机 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);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。