【2020.5.7今日编程】LeetCode 121 & 122.买卖股票的最佳时机 +LeetCode 94.二叉树的中序遍历(非递归实现)

LeetCode 121.买卖股票的最佳时机I

简单

  • 题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
    如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。
    注意:你不能在买入股票前卖出股票

  • 示例

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

  • 方法:动态规划。
  • cpp代码实现
class Solution
{
	int maxProfit(vector<int>& prices) 
	{
		if(prices.size() <= 1)
			return 0;
		int maxP = 0;
		int minP = prices[0];
		for(int i = 1; i < prices.size(); i++)
		{
			maxP = max(maxP, prices[i] - minP);
			minP = min(minP, prices[i]);
		}
		return maxP;
	}
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

LeetCode 122.买卖股票的最佳时机II

简单

  • 题目:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
    设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
    注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

  • 示例

输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。
随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。

  • 方法:贪心算法(说实话还不是很明白贪心算法,但是这道题我懂了)。

  • cpp代码实现

class Solution
{
	int maxProfit(vector<int>& prices) 
	{
		if(prices.size() <= 1)
			return 0;
		int maxP = 0;
		for(int i = 1; i < prices.size(); i++)
		{
			int temp = prices[i] - prices[i - 1];
			if(temp > 0)
				maxP += temp;
		}
		return maxP;
	}
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

LeetCode 94.二叉树的中序遍历(非递归)

中等

  • 题目:给定一个二叉树,返回它的中序 遍历。
  • 示例

输入: [1,null,2,3]
输出: [1,3,2]

  • 方法:用辅助栈实现非递归中序遍历。
  • cpp代码实现
class Solution
{
	vector<int> inorderTraversal(TreeNode* root)
	{
		vector<int>res;
		if(root == NULL)
			return res;
		stack<TreeNode*>st;
		TreeNode* ptr = root;
		while(!st.empty() || ptr != NULL)
		{
			while(ptr != NULL)
			{
				st.push(ptr);
				ptr = ptr->left;
			}
			if(!st.empty())
			{
				ptr = st.top();
				res.push_back(ptr->val);
				st.pop();
				ptr = ptr->right;
			}
		}
		 return res;
	};
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

写在最后
好多之前练习过的题目再拿来看的时候,还是写不出来,就很伤,可是没办法,温故而知新,只能不断重复练习,让自己不断熟悉。每天坐在电脑前脑子很累,整个人都麻木了。今天淅淅沥沥下了一天的雨,下雨的时候总是会伤感,会想很多~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值