题目一:

给定一个数组,它的第 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;
}
}

LeetCode简单题(四)的更多相关文章

  1. 这样leetcode简单题都更完了

    这样leetcode简单题都更完了,作为水题王的我开始要更新leetcode中等题和难题了,有些挖了很久的坑也将在在这个阶段一一揭晓,接下来的算法性更强,我就要开始分专题更新题目,而不是再以我的A题顺 ...

  2. leetcode简单题6

    今天的华师 Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, fro ...

  3. Go: LeetCode简单题,简单做(sort.Search)

    前言 正值端午佳节,LeetCode也很懂.这两天都是简单题,早点做完去包粽子. 故事从一道简单题说起 第一个错误的版本 简单题 你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最 ...

  4. LeetCode简单题(三)

    题目一: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润. 注意你不能在买入股票前卖出股 ...

  5. LeetCode简单题(二)

    题目一: 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的 ...

  6. LeetCode简单题(一)

    题目一: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组 ...

  7. leetcode刷题四<寻找两个有序数组的中位数>

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2 ...

  8. LeetCode简单题汇总

      1.两个数之和 给出一个整数数组,请在数组中找出两个加起来等于目标值的数, 你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index ...

  9. Leetcode简单题

    # Title Solution Acceptance Difficulty Frequency     1 Two Sum       44.5% Easy     2 Add Two Number ...

随机推荐

  1. Hadoop中的java基本类型的序列化封装类

    Hadoop将很多Writable类归入org.apache.hadoop.io包中,在这些类中,比较重要的有Java基本类.Text.Writable集合.ObjectWritable等,重点介绍J ...

  2. php商城数据库的设计 之无限分类

    商品分类,使用无限分类 即: -------如何创建数据表 pid---父级分类id,如果是顶级分类则为0 path---1,用户分类的排序 . 排序示例: 实现逻辑:获取type表的所有分类,ord ...

  3. 吴裕雄 python 机器学习——主成份分析PCA降维

    # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn import datas ...

  4. Crawlab-分布式爬虫管理系统

    一.简介 Crawlab 基于Celery的爬虫分布式爬虫管理平台,支持多种编程语言以及多种爬虫框架. Github: https://github.com/tikazyq/crawlab 参考资料 ...

  5. 511,display:inline-block什么时候不会显示间隙?

    (百科: 在CSS布局中,如果我们想要将一些元素在同一行显示,其中的一种方法就是把要同行显示的元素设置display属性为inline-block,但是你会发现这些同行显示的inline-block元 ...

  6. ALSA driver--PCM Interrupt handle

    PCM 中断处理函数的主要作用是用来更新buffer position. 在PCM的interrupt handle里面通过snd_pcm_period_elapsed来通知alsa-core buf ...

  7. yii2 password hash生成与验证方法

    1.生成 $password是明文.如:123456 $this->password_hash = Yii::$app->security->generatePasswordHash ...

  8. 连接mongodb服务

    语法:mongo.exe ip地址:端口号/数据库名(默认连接test) mongodb的默认端口号:27017 MongoDB内部结构   MongoDB MySQL 文档(Document) 记录 ...

  9. 服务器部署网站后,公网ip可以访问,域名不能访问问题(稳)

    出现问题 这几天我网站已经部署到vps上,域名也备好案,想使用域名指向我们公网ip.指完发现用域名访问不了网站,但是公网ip可以.于是看了网上资料,好像是要清除浏览器DNS缓存,我清完没用.然后发现我 ...

  10. 将linux上的项目传到github上

    在网友的帮助下,终于学会了这一招. 1.首先要确定你的linux上有安装了git. 2.到你的网页github上新建一个仓库,将其clone到linux上. 3.将你的项目放进这个空的仓库(文件夹). ...