LeetCode 122. Best Time to Buy and Sell Stock II
来源:互联网 发布:下载和平网络电视 编辑:程序博客网 时间:2024/06/05 07:15
大概题意:给定一个数组,数组的元素i表示第i天石头买入或者卖出的价格,求出能够赚到最多的钱的数目。注意不能在同一天买入和卖出。不限制买入卖出的次数。注意只有卖掉原来买入的石头之后才能再次买入,
这道题和LeetCode 121相似,但是不再限制买卖次数了。
这道题可以用贪心的做法来解答。找到每一段最长连续上升序列,在序列的第一天买入,在序列的最后一天卖出,这样就能达到利益的最大化。给个简单不太严谨的证明:首先在上升序列中买入卖出时不值得的,不会赚到更多的钱。例如序列1,2, 3, 4, 5, 6,只有以1的价格买入,以6的价格卖出,才能获得最大的利益。而在序列中买入,在序列之后卖出也不会赚到更多的钱。假如我在序列之后找到一个比序列最后一个元素还要大的元素卖出,这样会不会得到更好的结果呢?答案是不会的,因为序列之后的第一个元素是不会大于序列的最后一个元素的,如果我们选择在序列第一天买入,最后一天卖出,在之后的一天又买入,再在找到的元素更大的那一天卖出,这样收入会更多。在序列之前买入,序列之中卖出,或者在序列之前买入,序列之后卖出,简单的证明相似,就不再说明。这样一遍扫描就能得出结果,时间复杂度为O(n),代码如下:
# define INF 100000000class Solution {public: int maxProfit(vector<int>& prices) { int n = prices.size() ; if (n <= 1) return 0; vector<int> a ; a.push_back(INF) ; for (int i=0; i<n; i++) a.push_back(prices[i]) ; a.push_back(-INF) ; int ans = 0 ; int buy = 0 ; for (int i=1; i<=n; i++) { if (a[i] <= a[i-1]) buy = a[i] ; else if (a[i] >= a[i+1]) { ans += a[i] - buy ; } } return ans ; }};
0 0
- LeetCode 122. Best Time to Buy and Sell Stock II
- [Leetcode] 122. Best Time to Buy and Sell Stock II
- [leetcode] 122.Best Time to Buy and Sell Stock II
- 【leetcode】122.Best Time to Buy and Sell Stock II
- 【LeetCode】122.Best Time to Buy and Sell Stock II
- [leetcode] 122. Best Time to Buy and Sell Stock II
- LeetCode #122. Best Time to Buy and Sell Stock II
- 122. Best Time to Buy and Sell Stock II LeetCode
- [LeetCode]122. Best Time to Buy and Sell Stock II
- Leetcode 122. Best Time to Buy and Sell Stock II
- leetcode 122. Best Time to Buy and Sell Stock II
- LeetCode 122. Best Time to Buy and Sell Stock II
- LeetCode *** 122. Best Time to Buy and Sell Stock II
- leetcode-122. Best Time to Buy and Sell Stock II
- leetcode 122. Best Time to Buy and Sell Stock II
- leetcode 122. Best Time to Buy and Sell Stock II
- 【LeetCode】122. Best Time to Buy and Sell Stock II
- LeetCode - 122. Best Time to Buy and Sell Stock II
- javascript函数的声明、调用、传参和返回值
- Js获取当前日期时间及其它操作
- webP 格式图片在 iOS 中的应用
- CentOS 6.5下NFS安装配置
- java设计模式,原型模式
- LeetCode 122. Best Time to Buy and Sell Stock II
- Android 7.0 安装包修改后无法安装
- 小笔记-TIME_WAIT状态
- oracle基础语法
- 2014_shanghai_visit
- ACCP7.0 第二章 分割跳转
- object_c 如何扩写NSObject 中的performSelector 方法实现传三个以上的参数
- TCP/IP详解卷1中文版勘误表前言
- 高质量Java代码编写规范