LeetCode -- Best Time to Buy and Sell Stock系列
Question: Best Time to Buy and Sell Stock
Say you have an array for which the ith element is the price of a given stock on day i.
If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.
Analysis:
问题描述:给出一个数组,其中第i个元素表示第i天的股票售价。如果只允许一次买入卖出,请给出最大利润方案(即在第i天买入,第j天卖出使得利益最大)。
思路:要求保证在 i < j 的前提下,找出数组中最大和最小的元素,两者之间的差就是最大利润。因此用一个指针指向最低元素(若当前元素的值比史上最低值还低,则指向该元素),一个整数保存目前的利润(如果当前元素减去最低值还要大于已有利润,则更新一下)。
Answer:
public class Solution {
public static int maxProfit(int[] prices) {
if(prices.length == 0 || prices.length == 1)
return 0;
int low = prices[0];
int profile = 0;
for(int i=1; i<prices.length; i++) {
if(prices[i] < low)
low = prices[i];
if(prices[i] - low > profile)
profile = prices[i] - low;
}
return profile;
}
}
Question:Best Time to Buy and Sell Stock II
Question:
Say you have an array for which the ith element is the price of a given stock on day i.
Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times). However, you may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
Analysis:
题目描述:给出一个整数数组,第i个元素表示第i天得股票售价。 设计一个算法得到最大利润,与第一个版本不同的是,这次交易允许多次买卖,但是必须保证在买入股票之前要先卖出。
思路:开始想是否要用到动态规划的思想,后来发现,这个题目是要将原来的数组划分成一个个的小波峰波谷,而每次波峰与波谷之间的差值都可以作为利润。
Answer:
public class Solution {
public int maxProfit(int[] prices) {
if(prices.length == 0 || prices.length == 1)
return 0;
int profit = 0;
for(int i=1; i<prices.length; i++) {
int diff = prices[i] - prices[i-1];
if(diff > 0) {
profit += diff;
}
}
return profit;
}
}
Question:Best Time to Buy and Sell Stock III
Say you have an array for which the ith element is the price of a given stock on day i.
Design an algorithm to find the maximum profit. You may complete at most two transactions.
Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).
Analysis:
问题描述:给出一个整数数组,其中第i个元素表示第i天得股价。
设计一个程序找到最大利润,最多只能进行两次交易。
思路一:暴力求解方法。一次循环分成两段,每段求最大利润,然后找到最大利润,时间复杂度为O(n2).
思路二:Dynamic Programming的思想。首先正向遍历一遍,计算若是当前交易能够得到的profit;然后逆向遍历一遍(正向遍历与逆向遍历要求的东西是不一样的,正向是求当前如果进行交易的话能够得到的profit,而逆向遍历要求从i到最后能够获得的最大收益)。
Answer:
public class Solution {
public static int maxProfit(int[] prices) {
if(prices.length == 0 || prices.length == 1)
return 0;
int n = prices.length;
//正向寻找最大利润
int low = prices[0];
int profit0 = 0;
int [] pro = new int[n];
pro[0] = 0;
for(int i=1; i<n; i++) {
if(prices[i] < low)
low = prices[i];
int temp = prices[i] - low;
if(profit0 < temp)
profit0 = temp;
pro[i] = temp;
}
//逆向寻找最大利润
int high = prices[prices.length - 1];
int profit1 = 0;
int[] pro1 = new int[n];
pro1[n-1] = 0;
for(int i=n - 2; i>=0; i--) {
if(high < prices[i])
high = prices[i];
int temp = high - prices[i];
if(profit1 < temp)
profit1 = temp;
pro1[i] = profit1;
}
int res = 0;
for(int i=0; i<n; i++) {
int temp = pro[i] + pro1[i];
//System.out.println("pro: "+pro[i]+" pro1: "+pro1[i] );
if(res < temp)
res = temp;
}
return res;
}
}
LeetCode -- Best Time to Buy and Sell Stock系列的更多相关文章
- LeetCode:Best Time to Buy and Sell Stock I II III
LeetCode:Best Time to Buy and Sell Stock Say you have an array for which the ith element is the pric ...
- [LeetCode] Best Time to Buy and Sell Stock with Cooldown 买股票的最佳时间含冷冻期
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- [LeetCode] Best Time to Buy and Sell Stock IV 买卖股票的最佳时间之四
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- [LeetCode] Best Time to Buy and Sell Stock III 买股票的最佳时间之三
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- [LeetCode] Best Time to Buy and Sell Stock II 买股票的最佳时间之二
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- [LeetCode] Best Time to Buy and Sell Stock 买卖股票的最佳时间
Say you have an array for which the ith element is the price of a given stock on day i. If you were ...
- LEETCODE —— Best Time to Buy and Sell Stock II [贪心算法]
Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...
- LeetCode Best Time to Buy and Sell Stock IV
原题链接在这里:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/ 题目: Say you have an array ...
- [LeetCode] Best Time to Buy and Sell Stock with Transaction Fee 买股票的最佳时间含交易费
Your are given an array of integers prices, for which the i-th element is the price of a given stock ...
随机推荐
- 浅谈localStorage的用法
今天接到一个任务,说是让自动调节textarea标记的输入高度,而且还要记录下来,下次登录的时候还是调节后的高度,我第一时间就想到了localStorage的用法,直接代码献上: <html l ...
- YII2.0学习一 Advanced 模板安装
下载github上的完事安装包(本机环境使用Composer安装非常慢) https://github.com/yiisoft/yii2-app-advanced 解压到文件目录 wwwroot/sh ...
- SVN配置自启动-1053错误
主要内容:解决启动“配置的svn自启动服务”报1053错误 1. 环境: 系统: wind10 svn服务端版本: VisualSVN-Server-3.8.0-x64 2. 配置自启动 以管理员身份 ...
- JavaSE基础复习---2---2018/9/28
目录: 1.数据类型 2.变量 3.数组 1.数据类型 谈到java的数据类型,必须知道java是强类型语言.首先,每个变量有类型,每个表达式有类型,而且每种类型是严格定义的.其次,所有的数值传递,不 ...
- 学习CSS
CSS教程 菜鸟教程 通过使用CSS我们可以大大提升网页开发的工作效率 什么是CSS? CSS指层叠样式表(Cascading Style Sheets) 样式定义如何显示HTML元素 样式通常存储在 ...
- POJ-2421-Constructing Roads(最小生成树 普利姆)
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 26694 Accepted: 11720 Description The ...
- python2.7入门---元组
这次我们来学习下python中的元组.首先,基础认知点是,Python的元组与列表类似,不同之处在于元组的元素不能修改.元组使用小括号,列表使用方括号.元组创建很简单,只需要在括号中添加元素, ...
- 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(四):安装MySQL数据库
基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django 基于Ubuntu Server 16.04 LTS版本安装和部署Djan ...
- P1215 [USACO1.4]母亲的牛奶 Mother's Milk
P1215 [USACO1.4]母亲的牛奶 Mother's Milk 题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满 ...
- asp.net mvc 无刷新加载
1.视图(index) <!--start--> <div data-am-widget="list_news" class="am-list-news ...