1.最大连续子序列之和

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

给定K个整数的序列{ N1, N2, …, NK },其任意连续子序列可表示为{ Ni, Ni+1, …, Nj },其中 1 <= i <= j <= K。最大连续子序列是所有连续子序中元素和最大的一个, 例如给定序列{ -2, 11, -4, 13, -5, -2 },其最大连续子序列为{ 11, -4, 13 },最大和为20

输入:

一个整数数组

输出:

最大的和

样例:

输入:
1 2 3
输出:
6

思路:

动态规划经典例题。
dp[i]代表,使用了num[i]的子序列,最大和为多少。
既然dp[i]使用了num[i],那么dp[i+1]即为使用num[i+1],则这个子序列要么只有num[i+1]一个数,要么从上一个使用了num[i]的子序列接过来。(只要是非负数,怎么拿都不亏,负数才会出现问题)
∴dp[i] = max( dp[i-1]+num[i] , num[i])

代码:

#include <cstdio>
#include <string>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int dp[100010];
int a[100010];
int n;
int split(string &s,int a[])
{int n = 0;int res = 0;int k = 1;s += ' ';for(int i=0;i<s.size();i++){if(s[i]=='-'){k = -1;continue;}if('0'<=s[i] && s[i]<='9'){res = res*10 + s[i]-'0';}else{a[++n] = k*res;res = 0;k = 1;}}return n;
}
int main()
{string input;getline(cin,input);n = split(input,a);for(int i=1;i<=n;i++)dp[i] = max(0,a[i]);int max_num = 0;for(int i=1;i<=n;i++){dp[i] = max(dp[i-1]+a[i],dp[i]);max_num = max(max_num,dp[i]);}cout<<max_num<<endl;return 0;
}

A了。难点在处理输入。

2.利润最大化

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB

题目描述:

米兔是一个投资人,持有着小米的股票。股票价格每日都有波动,数组price代表了每日股票的具体价格,其中price[i]代表小米在第i天的股价。米兔最多可以进行两次交易(一个买进,卖出为一次交易)并且不能同时进行两次交易(必须在再次购买前出售掉之前的股票),米兔想知道他最多能够获得多少利润呢?

输入:

正整数序price,代表了股票价格。其中第i个数代表了第i天的价格。

输出:

两次交易后能获得的最大利润

样例:

输入:
2 1 5 0 2 3 1 4
输出:
8

思路:

枚举中间分隔,两头分别用前缀最小和后缀最大,最后再看看有没有只交易一轮的。其实一开始以为要开线段树来拿区间极值,写完线段树后发现用不上。这个算法效率不高,基本相当于暴力。

代码:

#include <cstdio>
#include <string>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXNUM = 100010;
int a[MAXNUM];
int n;
int split(string &s,int a[])
{int n = 0;int res = 0;int k = 1;s += ' ';for(int i=0;i<s.size();i++){if(s[i]=='-'){k = -1;continue;}if('0'<=s[i] && s[i]<='9'){res = res*10 + s[i]-'0';}else{a[++n] = k*res;res = 0;k = 1;}}return n;
}
int dp[MAXNUM],min_v[MAXNUM],max_v[MAXNUM];
int main()
{string input;getline(cin,input);n = split(input,a);int max_num = 0;memset(min_v,0x3f,sizeof(min_v));for(int i=1;i<=n;i++)min_v[i] = min(a[i],min_v[i-1]);for(int i=n;i>=1;i--)max_v[i] = max(a[i],max_v[i+1]);for(int key=2;key<=n-2;key++)//枚举中间{int tempL = 0;for(int i=1;i<=key;i++){tempL = max(tempL, a[i]-min_v[i]);}int tempR = 0;for(int i=n;i>=key+1;i--){tempR = max(tempR, max_v[i]-a[i]);}max_num = max(max_num, tempL+tempR);}for(int i=1;i<=n;i++){max_num = max(max_num, a[i]-min_v[i]);}cout<<max_num<<endl;return 0;
}

A了,不知道数据范围有多少,这个应该是O(n²)的。笑死我了,一开始写了4重for循环O(n^4)的,竟然能过77%。

 int max_num = 0;for(int i=1;i<=n-1;i++)for(int j=i+1;j<=n;j++)for(int k=j;k<=n;k++)for(int l=k+1;l<=n;l++)max_num = max(max_num,a[j]-a[i] + a[l]-a[k]);cout<<max_num<<endl;

2019.9.11 小米笔试算法岗编程题 两个动归相关推荐

  1. 阿里巴巴算法岗编程题:菜鸟仓库

    菜鸟仓库 菜鸟仓库是一个很大很神奇的地方,各种琳琅满目的商品整整齐齐地摆放在一排排货架上,通常一种品类的商品会放置在货架的某一个格子中,格子设有统一的编号,方便工人们挑选.有一天沐哲取菜鸟仓库参观,无 ...

  2. 滴滴2016.09.06校招 在线笔试 - 2道编程题

    滴滴2016.09.06校招 在线笔试 - 2道编程题 1.连续子数组的最大和 题目描述 一个数组有N个元素,求连续子数组的最大和.例如:[-1,2,1],和最大的连续子数组为[2,1],其和为3. ...

  3. 快手2019秋季校园招聘算法笔试A卷编程题 - 题解

    快手算法笔试题,两个动态规划,一个签到题.数据太恶心了,魔法深渊那题,没给模,后来是我自己根据结果猜出来的,模是100000000310000000031000000003,居然还不是常规的10000 ...

  4. 2019年字节跳动招聘算法岗,他们最看重哪些新技术能力?

    [导读]合格的算法工程师真正应该具备什么技能?在面试时,面试官又会如何验证你具备这些新技能?毕业仅一年,相继拿下头条.阿里.腾讯等offer的本文作者,为你绘制了一幅面试技能雷达图. 1 ◆◆ 哲学第 ...

  5. 网易笔试编程题java_2017年网易校招笔试JAVA研发编程题

    为什么80%的码农都做不了架构师?>>> 尝试挑战了下网易2017校招的笔试编程题,共三题,AC第一题,第二题思考了很久勉强用一种low逼的方式完成,第三题没有完成,希望路过的ACM ...

  6. 用友2023届秋招Java笔试-S2卷-编程题详解

    用友2023届秋招Java笔试-S2卷 其他的选择和多选不允许跳出 另外还有一道关于数据库查询的题: 有两个表,一个学生表,一个成绩表包含学生各个科目的成绩,学生表根据学生id和成绩表关联,要求的是通 ...

  7. 2019 快手校招编程题两道解答

    [编程题] 二进制中有多少个1 时间限制:1秒 空间限制:32768K 把一个32-bit整型转成二进制,其中包含多少个1,比如5的二进制表达是101,其中包含2个1 输入描述: 输入为整型(十进制) ...

  8. 【小米集团】2019校招在线考试-算法试卷编程题

    1. 小米大礼包 题目描述: 小米之家是成人糖果店.里面有很多便宜.好用.好玩的产品.中秋节快到了,小米之家想给米粉们准备一些固定金额大礼包.对于给定的一个金额,需要判断能不能用不同种产品(一种产品在 ...

  9. 快手2019秋季校园招聘算法笔试B卷编程题 - 题解

    快手算法笔试题,一个签到题,一个动态规划,一个二分答案.其中二分答案有个数据有问题. 题目链接:点这儿. 字符串排序 题目 月神拿到一个新的数据集,其中每个样本都是一个字符串(长度小于100),样本的 ...

最新文章

  1. 2022-2028年中国自热米饭市场竞争策略及行业投资潜力预测报告
  2. Mysql ERROR 145 (HY000)
  3. apk可以解压再复制到手机吗_不行了,这个打通手机和电脑的神器,必须得安利给你们...
  4. python excel 自动化-Python 自动化:处理 Excel(笔记)
  5. BZOJ2339: [HNOI2011]卡农(dp 容斥)
  6. CI框架源码阅读笔记8 控制器Controller.php
  7. 理工男都能有多痴情?
  8. 用DirectX Audio和DirectShow播放声音和音乐(4)
  9. TriumphX与Metaverse NFT艺术家RisingSun签署专属合同
  10. 我又踩坑了!如何为 HttpClient 请求设置 Content-Type 标头?
  11. python3库安装_Python3 Requirements库安装过程
  12. postgresql查看表的创建者和表的权限
  13. C++ std::set operator <= find失效 erase失效 解决方案
  14. Java_基础—List集合存储学生对象并遍历
  15. 严选chat_拔草 | 网易严选的零食,真的“严选”了吗?
  16. 金山WPS C++ 客户端 实习面试面经
  17. PMP证书女生适合考吗
  18. [spm操作] 什么是ROI,如何做ROI以及批量提取ROI的%signal change的示例程序
  19. face_recognition.face_encodings() 错误提示:IndexError: list index out of range
  20. DUTOJ-1151: 投硬币

热门文章

  1. 【复杂网络系列】复杂网络研究常用载体集
  2. windows平台下载android源码
  3. win7系统备份怎么做的几种方法
  4. node爬取墨迹天气数据发送定时邮件
  5. 单片机毕业设计 stm32万能红外遥控器
  6. Windows10 鼠标无法使用 USB receiver
  7. c语言bellman算法,深入理解Bellman-Ford(SPFA)算法
  8. revit二次开发之教学视频
  9. [arch Linux IDEA] 搭配MariaDB的JDBC
  10. 想知道手机配音软件哪个好用吗?一起来看看吧