说你有一个数组,其中第i个元素是第i天给定股票的价格。设计一个算法来找到最大的利润,最多可以完成两个交易。
来源:互联网 发布:java文件的输入输出流 编辑:程序博客网 时间:2024/05/20 06:28
用四个变量来表示俩次交易的买入卖出,遍历数组,比较每次交易的利益,保存最大的。
int maxProfit(vector<int> &prices) { int len=prices.size(); if(len==0) return 0; int buy1=INT_MIN; int sell1=0; int buy2=INT_MIN; int sell2=0; //表示经过当前操作后的最大profit for(int i=0;i<len;i++){ buy1=max(buy1,-prices[i]); sell1=max(sell1,buy1+prices[i]); buy2=max(buy2,sell1-prices[i]); sell2=max(sell2,buy2+prices[i]); } return sell2; }2 左右扫描 分别计算出 i 之前 pre[]和 之后 post[] 的最大利润 ,在 i 处为分割 求出最大交易
int maxProfit(vector<int> &prices) { int len=prices.size(); if(len==0) return 0; vector<int> pre(len); vector<int> post(len); int minPrice=prices[0]; // pre[0]=prices[0]; for(int i=1;i<len;i++){ minPrice=min(minPrice,prices[i]); pre[i]=max(pre[i-1],prices[i]-minPrice); } int maxPrice=prices[len-1]; // post[len-1]=prices[len-1]; for(int i=len-2;i>=0;i--){ maxPrice=max(maxPrice,prices[i]); post[i]=max(post[i+1],maxPrice-prices[i]); } int maxProfit=0; for(int i=0;i<len;i++){ maxProfit=max(maxProfit,pre[i]+post[i]); } return maxProfit; }
如果不限交易次数 则 遍历数组
int maxProfit(vector<int> &prices) { int len=prices.size(); if(len==0||len==1) return 0; int profit=0; for(int i=1;i<len;i++){ int sum=prices[i]-prices[i-1]; if(sum>0) profit+=sum; } return profit; }
------------------------------------------------------------
如果只可以交易一次,则找出差值最大的即可
int maxProfit(vector<int> &prices) { int len=prices.size(); if(len==0||len==1) return 0; int maxProfit=0; for(int i=0;i<len-1;i++){ int price=prices[i]; for(int j=i+1;j<len;j++){ int profit=prices[j]-price; if(profit>maxProfit){ maxProfit=profit; } } } return maxProfit; }
解2:
int maxProfit(vector<int> &prices) { int len=prices.size(); if(len==0||len==1) return 0; int maxProfit=0; int minPrice=prices[0]; for(int i=1;i<len;i++){ minPrice=min(minPrice,prices[i]); //找出最低价格 maxProfit=max(maxProfit,prices[i]-minPrice); //计算最大差值 } return maxProfit; }
阅读全文
0 0
- 说你有一个数组,其中第i个元素是第i天给定股票的价格。设计一个算法来找到最大的利润,最多可以完成两个交易。
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天
- 设计一个算法,删除一个顺序表中从第i个元素开始的k个元素。
- 试设计一个算法,删除一个顺序表从第i个元素开始的k个元素
- 有一个100万的数组,里边有两个是重复的,如何设计算法找到
- 中位数 21% 通过 给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数
- 在一个无序数组中找到第K个最小或者最大的元素
- 假如一个数组存储了一个股票,在一天交易窗口内各时间点的股票价格(正整数),只允许一次买入和一次卖出,请提供一个算法,计算出通过买入和卖出可以得到的最大利润
- 假如一个数组存储了一个股票,在一天交易窗口内各时间点的股票价格(正整数),只允许一次买入和一次卖出,请提供一个算法,计算出通过买入和卖出可以得到的最大利润
- 两个数组,大小都为n,两个数组里有相同的元素,设计一个算法,找到两个数组中相同的元素
- 给定一个单向链表(长度未知),请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素。实现这个算法,并为可能出现的特例情况安排好处理措施。“倒数第m个元素”是这样规定的:当m=0时,链表的
- 已知一支白菜连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该白菜第i天的
- 【算法】查找数组第i小的元素的算法
- 给定一个无序数组,找到其中最小的K个数
- 给定一个乱序数组,找到其中第K大的值,要求时间复杂度最低
- 注意引用数组@array第i个元素的时候,$array[i]不是@array[i]
- 笔试题&面试题:设计一个复杂度为n的算法找到单向链表倒数第m个元素
- 算法代码:查找数组中第i小的元素
- 简单ArrayList、LinkedList、HashSet、HashMap实现(一)
- JavaScript的十个小技巧
- 奥威数据可视化分析软件Power-BI 网络推广转化分析之APP推广效果分析
- 大家好,给大家介绍一下,这是我的女朋友@java
- Android 静默安装和卸载
- 说你有一个数组,其中第i个元素是第i天给定股票的价格。设计一个算法来找到最大的利润,最多可以完成两个交易。
- Java Web的新浪云SAE部署
- 欢迎使用CSDN-markdown编辑器
- Web之困
- React Native Android 开发环境搭建(Windows 版)
- web--前端之js代码2
- 自己的第一个博客,创建于西电读研期间,2017.10~未来
- Numpy 1.1
- mybatis中的mapper接口文件以及example类的实例函数以及详解