【风口之下,猪都能飞】(一道算法面试题) (待续)

题目:

风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2 <= n <= 100, 0 <= prices[i] <= 100

输入例子:

3, 8, 5, 1, 7, 8

解析:

这道题需要注意的地方在于,“买入前一定要保证手上没有股票”。

因此我们可以假设在数组的第一天买入(第一次买入),

第二天卖出(第一次卖出)

同时第二天买入(第二次买入)

第三天卖出(第二次卖出)

如下图:

可以通过4个for循环不断令这4个日期偏移,得出所有可能的买卖天数及对应的收益,并取最大值并返回它。

用代码实现如下:

int calculateMax(vector<int> &prices)
{
	int sz = prices.size();
	int remain_value1 = 0;
	int remain_value2 = 0;
	int ret = 0;

	if (sz == 2)
	{
		if (prices[1] - prices[0] > 0)
		{
			return prices[1] - prices[0];
		}
		else
		{
			return 0;
		}
	}
	int buy1_pos = 0;
	int sell1_pos = 1;
	int buy2_pos = sell1_pos;
	int sell2_pos = buy2_pos + 1;

	int buy1_prices = prices[buy1_pos];
	int buy2_prices = prices[buy2_pos];
	int sell1_prices = prices[sell1_pos];
	int sell2_prices = prices[sell2_pos];

	for (buy1_pos = 0; buy1_pos < sz - 1; buy1_pos++)
	{
		buy1_prices = prices[buy1_pos];
		for (sell1_pos = buy1_pos + 1; sell1_pos < sz; sell1_pos++)
		{
			sell1_prices = prices[sell1_pos];
			for (buy2_pos = sell1_pos; buy2_pos < sz - 1; buy2_pos++)
			{
				buy2_prices = prices[buy2_pos];
				for (sell2_pos = buy2_pos + 1; sell2_pos < sz; sell2_pos++)
				{
					sell2_prices = prices[sell2_pos];
					if (remain_value1 < sell1_prices - buy1_prices)
					{
						remain_value1 = sell1_prices - buy1_prices;
					}
					if (remain_value2 < sell2_prices - buy2_prices)
					{
						remain_value2 = sell2_prices - buy2_prices;
					}
					if (ret < remain_value1 + remain_value2)
					{
						ret = remain_value1 + remain_value2;
					}
				}
				remain_value1 = 0;
				remain_value2 = 0;
			}
		}
	}
	return ret;
}

这种方法简单粗暴,思路简单,但效率并不高,可以看出时间复杂度是O(N^4).

时间: 2024-08-08 13:55:57

【风口之下,猪都能飞】(一道算法面试题) (待续)的相关文章

LintCode上的一道算法面试题: 数字的统计

说到数字的统计,小时候的数学课大家都应该有学过,但数字太多太复杂的,手动肯定耗时间不说还很容易出错.所以今天分享一下如何用程序来完成. Have you met this question in a real interview? 你是否在真实的采访中遇到过这个问题? Count the number of k's between 0 and n. k can be 0 - 9.计算0到n之间的k的数量. k可以是0-9. 这道来自LintCode的算法题目,主要是教大家如何从以下数字中统计某一

一道算法面试题

在两个集合(万级别的数据量)中,找出相同的元素,并保存到一个集合中. 第一反应:两重循环解决问题,对,问题是可以解决,但是通过小括号中的提示可以看出,明显是在考效率的问题. 所以这种O(n^2)的时间复杂度是不行的. 继续想了一下:一次循环,遍历其中一个集合,拿集合中的元素去第二个集合中通过二分查找法查找,确定是否重复. 所以这种时间复杂度是:O(n*logn),较之前好些,但是还有更好的,可以是O(n)嘛? 经过面试官的提醒:首先对两个集合按照升序排列,再对两个集合定义各自的游标,一次循环,通

风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,

转自:http://www.cnblogs.com/ranranblog/p/5845010.html 风口之下,猪都能飞.当今中国股市牛市,真可谓“错过等七年”. 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价. 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票.若两次交易机会都放弃,收益为0. 设计算法,计算你能获得的最大收益. 输入数值范围:2<=

风口上的猪都能飞,为什么还有90%的人摔了?

小米手机创始人雷军曾说过:“站在风口上,连猪都能飞.” 作为我国互联网行业的领军人物,雷军此言,无异于刺激到了许多创业人的G点.中国的互联网行业兴起仅仅只有十几年,这个高速发展的掘金地,已经造就了无数亿万富翁的诞生——马云.马化腾.刘强东.李彦宏.前文提到的雷军……这些互联网大亨们神话般的奋斗史为众多创业者构造了一个仿佛触手可及的美梦. 今年两会上,总理金口一开,正式提出制定“互联网+”的行动计划,力挺互联网行业的未来,将其提升到国家政策发展的日程.所有人都想搭上这场行业革命的大风,于是,无数互

到处寻找移动互联网的风口:站在台风口,猪都能飞上天,为什么互联网能在家装行业产生这么巨大的冲击力?

“站在台风口,猪都能飞上天”曾成了创业者们的口头禅,大批创业人士在这句话的鼓动下到处寻找移动互联网的风口,意图给传统行业来一次颠覆性改革,家装行业也不例外.那么,互联网家装到底是洪水猛兽,还是只是个促进家装行业更规范.公开.开放的平台?未来,家装行业会走向何方?针对这些问题,腾讯大粤家居推出的[群雄逐鹿 互联网家装市场烽烟四起]系列专题. 为什么互联网能在家装行业产生这么巨大的冲击力?首先,是由于家装行业本身决定的,家装行业痛点无数:产业链长中间环节多.从业门槛低.价格信息不对称.流程复杂周期长

数据结构与算法面试题80道

由于这些题,实在太火了.所以,应广大网友建议要求,在此把之前已整理公布的前80题, 现在,一次性分享出来.此也算是前80题第一次集体亮相. 此些题,已有上万人,看到或见识到,若私自据为己有,必定为有知之人识破,付出代价. 所以,作者声明: 本人July对以上所有任何内容和资料享有版权,转载请注明作者本人July出处. 向你的厚道致敬.谢谢. ------------------------------------------------------------------------------

若干数据结构 && 算法面试题【四】(更新ing)

这是我的第三个面试题汇总. 想看之前的内容,请移步: http://zhweizhi.blog.51cto.com/10800691/1763237 ( 若干数据结构 && 算法面试题[一](更新完毕)) http://zhweizhi.blog.51cto.com/10800691/1775780 ( 若干数据结构 && 算法面试题[二](更新完毕)) http://zhweizhi.blog.51cto.com/10800691/1787562 ( 若干数据结构 &am

若干数据结构 && 算法面试题【三】(更新中)

这是我的第三个面试题汇总. 想看之前的内容,请移步: http://zhweizhi.blog.51cto.com/10800691/1763237 ( 若干数据结构 && 算法面试题[一](更新完毕)) http://zhweizhi.blog.51cto.com/10800691/1775780 ( 若干数据结构 && 算法面试题[二](更新完毕)) 另外,我的全部刷题代码都在这里: https://github.com/HonestFox/BrushQuestion

算法面试题

在上一篇博客中有原有提到分享一下面试题,最近也是才能新公司入职没多久,忙着熟悉环境,加上前不久出去玩了一趟(顺便写了篇游记,感兴趣的可以看一看).所以一直没时间整理博客,这段时间周末终于闲下来,就趁着周末就记录了几个面试过程中碰到的算法题. 本篇博客不打算介绍那些高逼格的算法(如winnow,bagging,ada boost等等),就讲讲最近在面试过程中遇到的算法题以及面试的时候给出的答案(出场率比较高的算法题我都列出来了,其他的就不说了).算法可以说是解决所有问题的基石.很多东西都可以转换为