zoukankan      html  css  js  c++  java
  • 这一周股市价格为[2,6,1,4,8],求哪一天买入哪一天卖出,可获得最大收益,最大收益为多少

    具体代码如下

    package com.trs.codetool.core;
    
    import java.util.Scanner;
    
    /**
     * @author zheng.changgang
     * @date 2019-12-19 10:01
     * 这一周股市价格为[2,6,1,4,8],求哪一天买入哪一天卖出,可获得最大收益,最大收益为多少
     */
    public class GuShiTest {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int num = scanner.nextInt();
            int[] nums = new int[num];
            for(int i=0;i<num;i++) {
                nums[i] = scanner.nextInt();
            }
            // 得到最大收益
            getBestGuShi(nums);
        }
    
        private static void getBestGuShi(int[] nums) {
            int  profit = 0;
            int min  = nums[0];
            int buyDay = 0;
            int sellDay = 0;
            for(int i=1;i<nums.length;i++) {
                if(nums[i] < min) {
                    min = nums[i];
                    buyDay = i;
                } else if(nums[i] - min > profit) {
                    profit = nums[i] - min;
                    sellDay = i;
                }
            }
            System.out.println((buyDay+1) + "天买入==="+ (sellDay +1) + "天卖出==="+"可获最大收益=="+profit);
        }
    }

    运行结果如下:

    扩展

    给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。

    设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。

    注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)
    具体代码如下:(运用动态规划)
    package com.trs.codetool.core;
    
    import java.util.Scanner;
    
    /**
     * @author zheng.changgang
     * @date 2019-12-19 14:33
     *  买卖股票的最佳时机 IV
    给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。
    
    设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。
    
    注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)
     */
    public class GuPiaoTest2 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int num = scanner.nextInt();
            int[] nums = new int[num];
            for(int i=0;i<num;i++) {
                nums[i] = scanner.nextInt();
            }
            System.out.println("输入最多交换k次");
            int k = scanner.nextInt();
            int max = getMaxProfit(nums,k);
            System.out.println("k次最大收益为:"+max);
        }
    
        private static int getMaxProfit(int[] prices,int k) {
            // 三维数组 第一个代表股票的序号 第二个代表交易k次 第三个代表持有股票的数量 只能0 或者1
            int[][][] mp = new int[prices.length][k+1][2];
            mp[0][0][0] = 0;
            mp[0][0][1] = -prices[0];
            for(int i=1;i<prices.length;i++) {
                mp[i][0][0] = mp[i-1][0][0];
                // 0次交易 持股为1
                mp[i][0][1] = Math.max(mp[i-1][0][0] - prices[i], mp[i-1][0][1]);
                for(int j=1;j<=k;j++) {
                    // j次交易持股为0
                    mp[i][j][0] = Math.max(mp[i-1][j-1][1] + prices[i], mp[i-1][j][0]);
                    // j次交易持股为1
                    mp[i][j][1] = Math.max(mp[i-1][j-1][0] - prices[i],mp[i-1][j][1]);
                }
                // 第k次交易持股0
               // mp[i][k][0] = (mp[i-1][k-1][1] + prices[i]) > mp[i-1][k][0] ?(mp[i-1][k-1][1] + prices[i]):mp[i-1][k][0] ;
            }
            int max = 0;
            for(int i=0;i<prices.length;i++) {
                for(int j=0;j<=k;j++) {
                  if(mp[i][j][0] > max) {
                      max = mp[i][j][0];
                  }
                }
    
            }
            return max;
        }
    }

     运行结果如下

                         

  • 相关阅读:
    空间数据可视化:1. 3D_Bar图表| 空间柱状图
    关系网络数据可视化:3. 案例:公司职员关系图表 & 导演演员关系网络可视化
    关系网络数据可视化:2. Python数据预处理
    关系网络数据可视化:1. 关系网络图&Gephi
    Python图表数据可视化Seaborn:4. 结构化图表可视化
    Python图表数据可视化Seaborn:3. 线性关系数据| 时间线图表| 热图
    Python图表数据可视化Seaborn:2. 分类数据可视化-分类散点图|分布图(箱型图|小提琴图|LV图表)|统计图(柱状图|折线图)
    Python图表数据可视化Seaborn:1. 风格| 分布数据可视化-直方图| 密度图| 散点图
    vue-UI(mui和muit-UI)
    sublime相关操作
  • 原文地址:https://www.cnblogs.com/zcg1051980588/p/12066244.html
Copyright © 2011-2022 走看看