• 题目
    风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<=100,0<=prices[i]<=100 。
    实例:
    输入: 3,8,5,1,7,8
    输出: 12
  • 思路详解
    由于可以进行两次交易(称一次买入卖出为一次交易),所以先考虑将问题分为两部分,即第一次交易,和第二次交易,假设数值AA表示输入中的每天的股票价格,是一个一维数组,first[]表示第一次交易的最大收益,secind[]表示第二次交易的最大收益,这两个数组内所存元素意义如下:
    first[i]:第0到第ii天进行第一次交易的最大收益。
    second[i]:第ii到第n−1n - 1天进行第二次交易的最大收益。
    那么如果进行两次交易,最终的最大收益应该是:max{first[i]+second[i]}max\{first[i] + second[i]\},i=0,1,…,n−1i=0,1,\dots,n-1。
    下面说明 first[i] 和 second[i] 的求法:

    first[i]={0,max{first[i−1],A[i]−min{A[0],A[1],…,A[i]}},i=0i>0

    \begin{equation} first[i]=\begin{cases} 0, &i=0 \\ max\{first[i-1],A[i]-min\{A[0],A[1],\dots,A[i]\}\},&i>0 \end{cases} \end{equation}

    second[j]={0,max{second[j+1],max{A[j],A[j+1],…,A[n−1]}−A[j]},j=n−1j<n−1

    \begin{equation} second[j]=\begin{cases} 0, &j=n-1 \\ max\{second[j+1],max\{A[j],A[j+1],\dots,A[n-1]\}-A[j]\},&j
    最后还要考虑之交易一次的情况,如果只交易一次,最大收益应该是first[n-1]。与两次交易的最大收益比较取较大值即可。

代码块

代码如下:

#include <iostream>
using namespace std;int i, j, n;
int A[1000], first[1000], second[1000];int max(int a, int b)
{return a > b ? a : b;
}int findMin(int A[], int left, int right)
{int s = 0x7ffffff;for(i = left; i < right; i++){if(A[i] < s)s = A[i];}return s;
}int findMax(int A[], int left, int right)
{int s = -80000000;for(i = left; i < right; i++){if(A[i] > s)s = A[i];}return s;
}int maxProfit(int A[], int n)
{//如果有两次交易first[0] = 0;for(i = 1; i < n; i++){first[i] = max(first[i - 1], A[i] - findMin(A, 0, i + 1));}second[n - 1] = 0;for(j = n - 2; j > 0; j--){second[j] = max(second[j + 1], findMax(A, j, n) - A[j]);}//求 first[i] + second[i] 的最大值int s = -80000000;for(i = 0; i < n; i++){if(first[i] + second[i] > s)s = first[i] + second[i];}//还要考虑只交易一次的情况int once = first[n - 1];return once > s ? once : s;
}int main()
{cin >> n;for(i = 0; i < n; i++)cin >> A[i];int result;result = maxProfit(A, n);cout << result << endl;
}

  • 结果如下:
    输入的第一行是数据个数,第二行是每一天的价格,第三行为输出的最大收益。

风口的猪(小米实习生笔试)相关推荐

  1. 风口的猪(小米实习生招聘)

    风口的猪(小米实习生招聘) 题目: 风口之下,猪都能飞.当今中国股市牛市,真可谓"错过等七年". 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示, ...

  2. 京东2015实习生笔试编程题

    小米Git git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<–base<–A<–A' ^ | - B<–B' 小米工程师常常需要寻找两 ...

  3. 什么是2014年互联网上“风口的猪”?

    什么是2014年互联网上"风口的猪"? 什么是明年的风口的猪?2014年底会盘点下,看哪个预测最给力. 文/金错刀 昨天是2013年最后一次梧桐会.本次主题是互联网金融,嘉宾是软交 ...

  4. 李彦宏为何不爽“风口与猪”?

    09年至今,IT领袖峰会已经进入第6个年头.因BAT等巨头的高管同台,这个峰会堪称"中国互联网最顶级对话".除了乌镇世界互联网大会,只有这个场合可以看到BAT三位大佬都聚齐,算是当 ...

  5. 【小米校招笔试】在Excel中,列的名称是这样一个递增序列:seq={A、B、C、... Z、AA、AB、AC、... AZ、BA、BB、BC、... BZ、CA、... ZZ、AAA、AAB...

    2016年小米校招笔试第一题(成都站) 1 在Excel中,列的名称是这样一个递增序列:seq={A.B.C....  Z.AA.AB.AC.... AZ.BA.BB.BC.... BZ.CA.... ...

  6. 【小米校招笔试】假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。

    2016年小米校招笔试第三题(西安站) 3 假如已知有n个人和m对好友关系(存于数字r).如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共 ...

  7. 【小米校招笔试】一个数组是由有序数组经过n次循环移动后所得,请你用最快速度查找某个元素位置

    2016年小米校招笔试第二题(西安站) 2 现有一个数组是由有序数组经过n次循环移动后所得,请你用最快速度查找某个元素位置(如1234568,向右移动3次后为67812345). 参考解法(Java版 ...

  8. 【小米校招笔试】给定一些线段,线段有起点和终点,求这些线段的覆盖长度,重复的部分只计算一次

    2016年小米校招笔试第一题(西安站) 1 给定一些线段,线段有起点和终点,求这些线段的覆盖长度,重复的部分只计算一次. 参考解法(Java版): package XiaoMi;/********** ...

  9. 最新九月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试三十题

    最新九月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试三十题 引言 自发表上一篇文章至今(事实上,上篇文章更新了近3个月之久),blog已经停了3个多月,而在那之前,自开博以来的21个月每月都不曾断过. ...

最新文章

  1. python 使用安装虚拟环境 virtualenv
  2. 从消息处理角度看应用程序与windows的关系(图示)
  3. Java版本多用户B2B2C商城源码-(八)消息总线(Spring Cloud Bus)
  4. snmp在企业网中的简单应用
  5. Oracle 11g R2手动配置EM(转)
  6. JS学习--Date对象
  7. [DeeplearningAI笔记]卷积神经网络2.9-2.10迁移学习与数据增强
  8. C++总结笔记(二)面向对象
  9. [深度学习-优化]dropout防止过拟合的理解
  10. 删除文件时出现找不到该项目 请确认该项目位置 怎么办【转】
  11. air dots 配对_小米AirDots蓝牙耳机如何连接iPhone?小米Air连接苹果手机的方法
  12. 信息系统安全思维导图
  13. 如何用OpenCV给图片加上文字?
  14. CSS3实现渐变背景
  15. delphi BMP与jpg互转
  16. TFS工作项模板自定义指南
  17. DeepFake检测论文汇总
  18. Unity SteamVR报错问题却影响运行的记录(Log path could not be located (112)“)
  19. go - time包的定时器/断续器
  20. 当代世界经济的发展趋势

热门文章

  1. 风雨二十载:OpenGL 4.3规范发布
  2. 几种常见的数据分区方法
  3. 基于GOP的时域滤波
  4. 拼多多api(json格式爬虫采集)
  5. 对Request.parameter中参数进行添加或修改
  6. php连接mysql错误:Call to undefined function mysql_connect()
  7. JVM的Eden由来
  8. 当前安装包签名出现异常_关于部分华为手机安装游戏提示“签名异常”问题说明...
  9. python零基础二
  10. npm本地仓库搭建教程