最近写了恒生电子的笔试,故在此记录.....

题目:股票

题目大概是:

给定一个数组prices,它的第 i 个元素是一支给定股票第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

其中本金M为10000元,给定股票价格的7天变化即prices数组:[1.0,2.0,1.0,2.0,2.0,3.0,2.0](这里开始与leetcode上的股票题不一样了)求出最大利润。

思路:这题我使用动态规划的思路。

第一步:定义dp数组的意义:

其中dp[i][0]我定义为第i天所持有的股票数,dp[i][1]定义为第i天不持有股票时所能获得的现金数。

第二步:确定递归公式

dp[i][0] =max(dp[i-1][0],dp[i-1][1]/prices[i]);这样做可以保证在变化的股市里能拿到最值得的股票数。其中dp[i-1][0]就是第i-1天我手中的股票数,dp[i-1][1]/prices[i]表示的就是我第i-1天不持有股票时的现金数去除当天的股价就可以得到股票数。通俗来讲就是我用现在的钱去买现在股市的股票是不是能获得更多,比我之前握在手中不卖会不会更值。

dp[i][1] = max(dp[i - 1][1], dp[i - 1][0]*prices[i]);要么就是延续之前的状态即dp[i-1][1],要么就是将前一天手中的股票给卖了(dp[i - 1][0]*prices[i]),两个求较大值。

第三步:初始化dp[][]数组:

其中两个状态分别是初始时的股票数dp[0][0]与现金数dp[0][1]。dp[0][0] =M/prices[0];//初始持有股票数
dp[0][1] = M;//最开始就为本金M=10000元

第四步:确定遍历顺序:

由题可知dp[i][1]的求出需要依赖dp[i-1][1]与dp[i-1][0]。所以从左向右遍历。

第五步:举例推导:prices[i]={1.0,2.0,1.0,2.0,2.0,3.0,2.0}注意推导从prices[1]开始

dp[1][0]=max(10000股,5000股)=10000股;

dp[1][1]=max(10000元,20000元)=20000元;

dp[2][0]=max(dp[1][0],dp[1][1]/prices[2])=20000股

dp[2][1]=max(dp[1][1],dp[1][0]*prices[2])=20000元

dp[3][0]=20000股

dp[3][1]=max(dp[2][1],dp[2][0]*prices[3])=40000元

dp[4][0]=20000股

dp[4][1]=40000元

dp[5][0]=max(20000,40000/3.0)=20000股

dp[5][1]=max(40000,20000*3.0)=60000元

dp[6][0]=max(20000,60000/2.0)=30000股

dp[6][1]=max(60000,30000*2.0)=60000元

即dp[6][1]为最大毛利润。

其中可以看到dp[5][1]与dp[6][1]所求的值一样,这是因为我们只知道7天的股市变化,而dp[6][1]就是把之前赚到的钱在最后一天里继续全部买下股票,然后再在当天继续卖出,等于是没有赚。赚的钱还是之前你所赚的。

代码如下:

#include<iostream>
#include<vector>
using namespace std;
double M=10000.0;
double maxProfit(vector<double>& prices) {int len = prices.size();vector<vector<double>> dp(len, vector<double>(2, 0));dp[0][0] =M/prices[0];//持有股票数dp[0][1] = M;//卖出股票所得现金for (int i = 1; i < len; i++) {dp[i][0] =max(dp[i-1][0],dp[i-1][1]/prices[i]); //锁定最值得的股票数dp[i][1] = max(dp[i - 1][1], dp[i - 1][0]*prices[i]);//即获得的毛利润}return dp[len - 1][1];//最大毛利润
}
int main() {vector<double>p = {1.0,2.0,1.0,2.0,2.0,3.0,2.0};cout<<maxProfit(p)-M;}

结果:50000;dp[len-1][1]-M:即为纯利润。

恒生电子2023年实习春招笔试第二题(编程)相关推荐

  1. 网易2017春招笔试真题编程题集合

    网易2017春招笔试真题编程题集合 题目来源:牛客网 https://www.nowcoder.com/profile/7952866/test/7811777/83061 1.双核处理 题目描述 一 ...

  2. 题解-百度2017春招笔试真题编程题集合

    题目链接:https://www.nowcoder.com/test/4998655/summary 一共五题,从第五题开始写,难度由难到易 ----------------------------- ...

  3. 网易2017春招笔试真题编程题集合(2)——赶去公司

    时间限制:1秒 空间限制:32768K 终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug.假设市区是一个无限大的区域,每条街道假设坐标是(X, ...

  4. 网易2017春招笔试真题编程题集合(5)——魔力手环

    小易拥有一个拥有魔力的手环上面有n个数字(构成一个环),当这个魔力手环每次使用魔力的时候就会发生一种奇特的变化:每个数字会变成自己跟后面一个数字的和(最后一个数字的后面一个数字是第一个),一旦某个位置 ...

  5. 滴滴出行2017秋招笔试真题-编程题汇总_Java实现

    滴滴出行2017秋招笔试真题-编程题汇总_Java实现 注:有的题参考别人的思路,用我最容易理解的代码编的程序,所以可以不能最优的解法,后续我会进行更新,只是一个思路,我的笔记而已,所以不喜勿喷~~~ ...

  6. 360春招笔试算法题题解

    A. 跑步(水) 题目描述 小明同学喜欢体育锻炼,他常常去操场上跑步.跑道是一个圆形,在本题中,我们认为跑道是一个半径为R的圆形,设圆心的坐标为原点(0,0). 小明跑步的起点坐标为(R,0),他沿着 ...

  7. 2021中国农业银行(浙江省分信息科技岗)春招笔试编程题(待更)

    2021中国农业银行春招笔试共计三道编程题题目,详解如下: 题目一 def list_to_set(ls):len_ls = ls[-1] - ls[0]ls0 = [ls[0]]for i in r ...

  8. 2023银行春招笔试经验分享!

    根据如信银行考试中心发布: Q:银行春季招聘的笔试什么时候开始?考核?难不难? A:各大银行春季招考的笔试时间多在4月份,而四大行则一般安排在4月中旬的一个周末:就拿去年中国工商银行一般科目的笔试来说 ...

  9. 华为2018春招笔试题目 字节流解析与长整数相乘

    基础知识杂烩: 字节也叫Byte,是计算机数据的基本存储单位, bit存储内容是0和1,bit是计算机中最小的储存单位 一个Byte是由8个bit组成,它是最小的可寻址单元 ,1个字节等于8位二进制. ...

最新文章

  1. Win2008学习(二),群集的仲裁配置
  2. LVM 类型的 Storage Pool - 每天5分钟玩转 OpenStack(8)
  3. Jmeter连接mysql(一)
  4. ngod规范_NGOD的架构说明与比较
  5. java查看jvm对象个数_jmap-查看 jvm 内存对象信息
  6. feko软件_计算电磁学各种方法和电磁仿真软件简述
  7. tomcat设置http自动跳转为https访问
  8. 矩阵的Cholesky分解
  9. Java SE 疑难点记录
  10. Mysql 排序null值 排序问题分析
  11. tftp上传下载命令
  12. MEGA2560 arduino烧录USB 芯片flash以及bootloader记录
  13. KETTLE将txt文本文件加载入库
  14. ios storyboard 传参 返回传参(segue)
  15. 大型文件传输,前后端分别怎么处理?
  16. 做新媒体短视频运营需要什么技能
  17. TF卡和SD卡的区别
  18. Spring Boot自定义starter必知必会条件
  19. 【有利可图网】PS实战系列:PS美化婚纱照片
  20. 自动化运维为什么是必须的?

热门文章

  1. 智慧职教云Java题库_智慧职教云课堂APPJava程序设计试题及答案
  2. element ui 图片加载失败_element图片懒加载的问题
  3. 设计模式C++实现(20)——解释器模式
  4. 国际商业美术设计师阿里云开发首页
  5. 1527. 患某种疾病的患者(SQL)
  6. 最好用的便笺免费下载及教程
  7. Android 9.0实现系统内录(只录制系统声音)
  8. Ubuntu20.04上切换系统声音( by quqi99)
  9. 求推荐一个手机、电脑、网页端三平台通用的桌面便签工具
  10. conway生命小游戏,实现细胞普通行为