【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)

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

你可能感兴趣的:(leetcode,c++,算法)