zoukankan      html  css  js  c++  java
  • LeetCode简单题(四)

    题目一:

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

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

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

    示例 1:

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

    方法一:

    1、暴力法,对于这种最优问题的求解,一定要有一种思维---递归,看起来无法下手,递归往往可以帮我们解决;

    2、构造函数进行递归,递归不一定是对原函数进行递归,比如数组,就可以从第一位进行递归,多加一个参数;

    3、calculate(int [] nums,int s),递归出口:if(s>=nums.length) return 0;

    4、暴力法进行,从遍历第一个元素开始,for(int i=s,i<nums.length;i++),for(int j=i+1;j<nums.lenght;j++) profit=calculate(nums,j+1)+nums[j]=nums[i];

    具体代码:

    class Solution {
        public int maxProfit(int[] prices) {
            
            return calculate(prices, 0);
        }
    public int calculate(int[] prices,int s) { if(s>=prices.length) return 0; int max=0; for(int i=s;i<prices.length;i++) { int MaxProfit=0; for(int j=i+1;j<prices.length;j++) { if(prices[i]<prices[j]) { int profit=calculate(prices, j+1)+prices[j]-prices[i]; if(profit>MaxProfit) MaxProfit=profit; } } if(MaxProfit>max) max=MaxProfit; } return max; } }

    方法二:

    1、一次遍历,股票的买入和卖出直观上是两个数值,直接进行就是还是有一点复杂;

    2、我们试着将这个过程进行细化,如果后面的值大于前面的值,将其相减得到其值,记录,一直循环下去将所有结果相加就可以得到最后的结果。

    具体代码:

    class Solution {
        public int maxProfit(int[] prices) {
            
            int maxProfib=0;
            for(int i=1;i<prices.length;i++)
            {
                if(prices[i]>prices[i-1])
                {
                    maxProfib+=prices[i]-prices[i-1];
                }
            }        
            return maxProfib;
        }
    }
  • 相关阅读:
    【5】Python之nnlog写日志模块,yagmail发送邮件模块
    【11】Python面向对象:封装和继承(类、函数/方法、重写)
    【5】Java继承
    【4】作业:办公信息化管理系统
    【3】综合案例:学生信息管理
    【2】Java封装
    【1】java面向对象
    【9】综合案例:数组移位与统计
    【8】Java方法
    【7】Java数组之二维数组
  • 原文地址:https://www.cnblogs.com/Optimism/p/11441646.html
Copyright © 2011-2022 走看看