zoukankan      html  css  js  c++  java
  • <leetcode122>买卖股票的最佳时机

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

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

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

    示例 1:

    输入: [7,1,5,3,6,4]
    输出: 7

    解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
    随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。

    这道题用深搜可以解决
    先说思路:
    设初始数组为 price[], 长度为n

    1. 从第一个数开始,找第2个,第三个,第四个等等等数,如果设找到的数为next, 则如果price[next] > price[1], 就获*profit1 = price[next] > price[1] *
    2. 再从 pricep[next] 开始,再进行计算,找到next+1到 他下面比他大的值的差值profit2 ,得到新的最大利润max = profit1 + profit2,
    3. 第一跟第二步走完之后,从第一个数出发的就走完了,接着走第二个数开始的情况,也就是深度搜索。
      整个过程还是比较简单的,直接上代码
    
    public class GuPiao122 {
        static int max = Integer.MIN_VALUE;
    
        public static void main(String[] args){
    
            int[] prices = {1,2,3,4,5};
            int sum = 0;
            calculate(prices, 0, sum);
            System.out.print(max);
    
        }
    
    
        public static void  calculate(int[] prices, int s, int sum){
            //边界处理好,如果到末尾了,因为没有下一个数给他判断得到profit,所以就return 结束掉
            if(s == prices.length-1){
                return;
            }
            //双层循环
            for(int i = s; i < prices.length; i++){
                for(int j = s+1; j < prices.length; j++){
                  //如果后一个数比前一个数大,才进行搜索下
                    if(prices[j] > prices[i]){
                        int profit = prices[j] - prices[i];
                        int newSum = profit +  sum;
                        if(newSum > max){
                            max = newSum;
                        }
                        for(int h = j+1; h<prices.length; h++){
                            calculate(prices, h, newSum);
                        }
                    }
                    //如果后一个数没前一个数大,就再找下一个 ( 这里是通过 j+1操作的)  
    
    
    
                }
            }
        }
    }
    
    
  • 相关阅读:
    Jenkins构建触发器(定时构建项目)
    Linux–Nginx攻略
    Python单元测试——深入理解unittest
    数据库设计三大范式
    Selenium 高阶应用之WebDriverWait 和 expected_conditions
    python基础——对时间进行加减
    并发并行同步异步多线程
    js同步和异步
    hibernate中session.flush()
    Hibernate实现分页查询
  • 原文地址:https://www.cnblogs.com/disandafeier/p/9875303.html
Copyright © 2011-2022 走看看