Best Time to Buy and Sell Stock III (Java)
来源:互联网 发布:二分搜索算法代码 编辑:程序博客网 时间:2024/06/06 16:36
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).
这道题有I、II的不同之处在于只能买进两次,而且必须是买进、卖出、再买进、再卖出这样,手中不能超过一只股票。
将I的解法变为从前往后,从后往前遍历两遍,寻找到i的 0...i的最大值以及i...length - 1的最大值,将这两个值相加,找到最大利润。
Source
public class Solution { public int maxProfit(int[] prices) { if(prices.length <= 1) return 0; int min = prices[0]; int[] a = new int[prices.length]; for(int i = 1; i < prices.length; i++){ min = Math.min(min, prices[i]); //p[0]...p[i]当前数组最小值 a[i] = Math.max(a[i - 1], prices[i] - min); //a[i]存储从0..i的利益最大值 } int max = prices[prices.length - 1]; int[] b = new int[prices.length]; for(int i = prices.length - 2; i >= 0; i--){ max = Math.max(prices[i], max); b[i] = Math.max(max - prices[i], b[i + 1]); } int maxp = 0; for(int i = 0; i < prices.length; i++){ maxp = Math.max(maxp, a[i] + b[i]); //a[i]是从前往后数,b[i]是从后往前数 //所以可以有效避免出现前一次还没卖出后一次就买入的情况,a[i]是从0到i,b[i]是从i到length - 1 } return maxp; }}
Test
public static void main(String[] args){ int[] prices = {1,2,3,6,3}; System.out.println(new Solution().maxProfit(prices)); }
0 0
- [Leetcode] Best Time to Buy and Sell Stock III (Java)
- Best Time to Buy and Sell Stock III Java
- Best Time to Buy and Sell Stock III (Java)
- [LeetCOde][Java] Best Time to Buy and Sell Stock III
- LeetCode Best Time to Buy and Sell Stock III
- LeetCode Best Time to Buy and Sell Stock III
- [Leetcode] Best Time to Buy and Sell Stock III
- leetcode 16: Best Time to Buy and Sell Stock III
- LeetCode Best Time to Buy and Sell Stock III
- Best Time to Buy and Sell Stock III
- Best Time to Buy and Sell Stock III
- [LeetCode] Best Time to Buy and Sell Stock III
- leetcode 62: Best Time to Buy and Sell Stock III
- [LeetCode] Best Time to Buy and Sell Stock III
- Best Time to Buy and Sell Stock III
- 【leetcode】Best Time to Buy and Sell Stock III
- Best Time to Buy and Sell Stock III
- LeetCode - Best Time to Buy and Sell Stock III
- Spring进阶—如何用Java代码实现邮件发送(二)
- UVA - 11538 - Chess Queen (数论~)
- 使用随机文件流类RandomAccessFile将一个文本文件倒置读出。
- Linux系统调用--fcntl函数详解
- 【CodeForce】509F Progress Monitoring(树形情景区间DP)
- Best Time to Buy and Sell Stock III (Java)
- shell写的日期函数
- oracle一个创建用户、创建表空间、授权、建表的完整过程
- linux的open函数
- CORS(跨域资源共享) 的配置
- Java String面试题
- 从相册中取图片奔溃问题解决
- Ant自动编译打包&发布 android项目
- HP UNIX 命令