当前位置:   article > 正文

leetcode初级算法练习题-买卖股票的最佳时机 II_买卖股票的最佳时机 ii 给定一个数组 prices ,其中 prices[i] 是一支给定股

买卖股票的最佳时机 ii 给定一个数组 prices ,其中 prices[i] 是一支给定股

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

题目

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

二、代码

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

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/694860
推荐阅读
相关标签
  

闽ICP备14008679号