#leetcode#121. Best Time to Buy and Sell Stock
2016-04-26 20:25
295 查看
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.
思路1
将n天分为前i天和后n-i天,维护两个数组,记录前i天的最小价格和后n-i天的最大价格,随后相减寻找最大值
class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size()==0) return 0;
int n=prices.size();
int max
={0};
int min
={0};
int c
={0};
int i;
min[0]=prices[0];
max[n-1]=prices[n-1];
for(i=1;i<n;i++)
{
min[i]=min[i-1];
if(prices[i]<min[i])
{
min[i]=prices[i];
}
max[n-1-i]=max[n-i];
if(prices[n-1-i]>max[n-1-i])
{
max[n-1-i]=prices[n-1-i];
}
}
int ans=0;
for(i=0;i<n;i++)
{
int profit=max[i]-min[i];
if(ans<profit)
ans=profit;
}
return ans;
}
};
思路2
一次遍历,仅需要维护最小价格和收益两个变量。
首先判断当天与之前最小价格之间的关系,判断是否需要更新最小价格。class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size()==0) return 0;
int n=prices.size();
int min=prices[0];
int ans=0;
int i;
for(i=1;i<n;i++)
{
if(prices[i]<min)
min=prices[i];
int fit=prices[i]-min;
if(fit>ans)
ans=fit;
}
return ans;
}
};
其次判断当天价格减去最小价格的大小,判断是否需要更新收益。
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.
思路1
将n天分为前i天和后n-i天,维护两个数组,记录前i天的最小价格和后n-i天的最大价格,随后相减寻找最大值
class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size()==0) return 0;
int n=prices.size();
int max
={0};
int min
={0};
int c
={0};
int i;
min[0]=prices[0];
max[n-1]=prices[n-1];
for(i=1;i<n;i++)
{
min[i]=min[i-1];
if(prices[i]<min[i])
{
min[i]=prices[i];
}
max[n-1-i]=max[n-i];
if(prices[n-1-i]>max[n-1-i])
{
max[n-1-i]=prices[n-1-i];
}
}
int ans=0;
for(i=0;i<n;i++)
{
int profit=max[i]-min[i];
if(ans<profit)
ans=profit;
}
return ans;
}
};
思路2
一次遍历,仅需要维护最小价格和收益两个变量。
首先判断当天与之前最小价格之间的关系,判断是否需要更新最小价格。class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size()==0) return 0;
int n=prices.size();
int min=prices[0];
int ans=0;
int i;
for(i=1;i<n;i++)
{
if(prices[i]<min)
min=prices[i];
int fit=prices[i]-min;
if(fit>ans)
ans=fit;
}
return ans;
}
};
其次判断当天价格减去最小价格的大小,判断是否需要更新收益。
相关文章推荐
- Efficient Graph-Based Image Segmentation
- 用程序获取本机IP地址,mac地址
- 数据结构之二叉树的先序、中序、后续的求法
- HDU 4151 The Special Number(预处理打表+二分)
- android 之view的测量和绘制(群英传读书笔记1)
- 在linux中添加环境变量
- VS2015如何自定义类模板、我的模板——原来这么简单!
- UVA-1631 Locker(DP)
- 解决Scrapy性能问题——案例四(响应太多导致溢出)
- c++第四次作业
- JAVA基础总结
- java并发编程--Executor框架(一)
- linux下动态链接库解决方案(二)
- 算法训练 Hanoi问题
- hdu4549 矩阵快速幂 + 欧拉降幂
- 面向切面编程aop
- 统计素数个数
- Python实现KNN算法
- Gradle buildTypes 设置自动打包环境
- 基于HCE的NFC移动支付及云HCE