Leetcode算法学习日志-121 Best Time to Buy and Sell Stock
来源:互联网 发布:网络监控光纤收发器 编辑:程序博客网 时间:2024/05/01 21:56
Leetcode 121 Best Time to Buy and Sell Stock
题目原文
Say you have an array for which the ith element is the price of a given stock on dayi.
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.
Example 1:
Input: [7, 1, 5, 3, 6, 4]Output: 5max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)
Example 2:
Input: [7, 6, 4, 3, 1]Output: 0In this case, no transaction is done, i.e. max profit = 0.
题意分析
本题是一个简单的求最优解问题,只能买卖一次股票,求最大收益,当卖的时候的价格比买的时候高,收益为0。
解法分析
本题采用动态规划方法求解。如果用暴力方法,显而易见算法复杂度为O(n^2),所以一般用动态规划该方法复杂度变为o(n),只有一个for循环,也就是通过遍历一次原序列就能得到解。首先分析最优子结构,令从左开始的一个子序列中最小元素为a,下一个元素为b,如果b比a小,则算上b后的序列的最小元素就是b,否则仍是a;如果b比a大,则求其差值,与Pro比较,如果差值大于pro,则修改pro的值,否则pro的值不变。这是一个简单的自底向上的动态规划问题。C++代码如下:
class Solution {public: int maxProfit(vector<int>& prices) { int n=prices.size(); if(n==0||n==1) return 0; int pro=0,min=prices[0],i,temp; for(i=1;i<=n-1;i++){ if(prices[i]>min){ temp=prices[i]-min; if(temp>pro) pro=temp; } else min=prices[i]; } return pro; }};
由于只有一个for循环,所以复杂度为O(n),注意对空输入和只有一个元素的输入的处理,都应输出0。阅读全文
0 0
- Leetcode算法学习日志-121 Best Time to Buy and Sell Stock
- Leetcode算法学习日志-122 Best Time to Buy and Sell Stock II
- Leetcode算法学习日志-714 Best Time to Buy and Sell Stock with Transaction Fee
- Leetcode算法学习日志-309 Best Time to Buy and Sell Stock with Cooldown
- LeetCode 121: Best Time to Buy and Sell Stock
- LeetCode(121)Best Time to Buy and Sell Stock
- LeetCode 121 Best Time to Buy and Sell Stock
- LeetCode: Best Time to Buy and Sell Stock [121]
- LeetCode 121 Best Time to Buy and Sell Stock
- [leetcode 121] Best Time to Buy and Sell Stock
- Leetcode NO.121 Best Time to Buy and Sell Stock
- LeetCode 121 Best Time to Buy and Sell Stock
- LeetCode(121) Best Time to Buy and Sell Stock (Java)
- leetcode-121 Best Time to Buy and Sell Stock
- leetcode || 121、Best Time to Buy and Sell Stock
- Best Time to Buy and Sell Stock - LeetCode 121
- leetcode#121 Best Time to Buy and Sell Stock
- Leetcode 121 Best Time to Buy and Sell Stock
- poj2349 Kruskal题解
- 网易2017内推 [编程题] 交错01串@Java
- lintcode --寻找旋转排序数组中的最小值 II
- Superset搭建
- Java虚拟机对象创建管理与垃圾回收知识整理与分析
- Leetcode算法学习日志-121 Best Time to Buy and Sell Stock
- CVE-2015-2545浅析-word释放重引用漏洞
- Java-JDK动态代理
- NOIP 2000年提高组复赛 单词接龙
- 51nod 1289大鱼吃小鱼 模拟 单调栈
- 各种demo:css实现三角形,css大小梯形,svg使用
- CSU1937: 小明的父亲
- Android真机调试——远程主机强迫关闭了一个现有的连接。
- Maven环境配置及简单使用(二)