算法Day8-购买和销售股票的最佳时机(一、二)
来源:互联网 发布:加工中心编程招聘信息 编辑:程序博客网 时间:2024/05/16 19:35
题目一
购买和销售股票的最佳时机(一)
假设有一个数组,其对i个元素是一支给定的股票在某一天i的价格。
如果最多只允许你完成一次交易(例如,购买或销售一次该股票的份额),设计一个算法,来找到最大的赢利点。
解析一
题目设定了只能交易一次,所以只要找到数组中任意两元素间最大的一个差值就可以了。用两个变量来记录当前最低价minV和当前最大利润maxP。
对于每一个数组元素,计算其与最低价minV的差值,如果该差价小于maxP,那么该元素不可能为所求元素,直接跳过,如果该差价大于maxP,则该元素产生了更大利润,用该差价替换maxP。
代码一
int maxProfit(vector<int> &prices){ int minV = INT_MAX;//最低价 int maxP = 0;//最大利润 int diff = 0;//当前价格与最低价的差价 int buyDate,sellDate; for(int i=0; i<prices.size(); i++) { if(prices[i] < minV){ minV = pricrs[i]; buyDate = i; } diff = prices[i] - minV; if(maxP < diff){ maxP = diff; sellDate = i; } } cout<<"买入日: "<<buyDate<<" 卖出日:"<<sellDate<<endl; return maxP;//返回最大差价}
题目二
购买和销售股票的最佳时机(二)
如果你可以进行任意次数的交易(例如,多次购买和销售该股票的份额)。
然而,你不能同时进行多次交易(例如,在再次购买之前,必须先销售该股票)。设计一个算法,来找到最大的赢利点。
解析二
因为可以交易无限次数,所以最大交易利润,就是所有交易利润的总和。从左到右扫描数组,只要是交易利润(差价>0),都加起来,即为所求。
代码二
int maxProfit(vector<int> &prices){ int max = 0; int sum = 0; for(int i=1; i<prices.size(); i++) { int diff = prices[i] - prices[i-1]; if(diff > 0){ sum += diff; cout<<"买入日: "<<i-1<<endl; cout<<"卖出日: "<<i<<endl; } } return sum;}
0 0
- 算法Day8-购买和销售股票的最佳时机(一、二)
- 算法Day9-购买和销售股票的最佳时机(三)
- 购买和销售股票最佳时机(C++)
- 买卖股票的最佳时机
- 买卖股票的最佳时机
- 买卖股票的最佳时机
- LintCode-买卖股票的最佳时机
- 题目:买卖股票的最佳时机
- LintCode--买卖股票的最佳时机
- LintCode_149_买卖股票的最佳时机
- Lintcode:买卖股票的最佳时机
- 买卖股票的最佳时机 II
- 买卖股票的最佳时机 III
- 买卖股票的最佳时机|_1
- 买卖股票的最佳时机||_1
- 买卖股票的最佳时机,lintcode
- 【LintCode】买卖股票的最佳时机
- lintcode--买卖股票的最佳时机
- 2016.12.27 看以前项目
- Windows下使用taskkill 命令结束进程
- 运行时代码求值
- Mybatis分页拦截器
- Java集合类用法介绍
- 算法Day8-购买和销售股票的最佳时机(一、二)
- Android SDK 手动下载目录(vs2015安装报错时借用)
- C---二分查找来插入数据
- 下拉列表select的多种属性
- Hadoop ssh实现远程服务器免密码登陆
- [leetcode][125]Valid Palindrome
- Android 电池管理系统
- c++如何输出文本中两列对齐的数据
- linux下保护端口的测试