D1M电商怎么样?刚拿到Offer,想知道值不值得去。

C++ 一直是一门备受争议的语言,关于 C++ 的书籍也是浩瀚如海。

C++ 最大的缺点就是语法复杂,而且难学难精。

C++的难学,不仅在其广博的语法、语法背后的语义、语义背后的深沉思维、深层思维背后的对象模型; C++的难学还在于它提供了 4 种不同(相辅相成)的编程思维模型 : Procedural-based,object-based, object-oriented, generic

学习 C 语言也许一本 K&R 的《C程序设计语言》就够了,但是在 C++ 世界里,找不到这样一本书。

这是一个爱速成的年代,大多数人很难耐得住寂寞花很长时间去学习一门语言,所以《21天学通C++》的销量还蛮不错的。

但是学习就是要看大量的经典书和写代码实践,在这送大家一份我大学期间整理的计算机经典书籍,这些书大家可以在这里获取,对于学习计算机的同学帮助非常大,且十分系统

但是很遗憾,别说 21 天,就是一两年也很难精通 C++ 。

学好过程,一定离不开读大量的书籍甚至标准库文档,

至于书单的话,可以看下这个C++ 最全书单,包含几十本经典的PDF和下载方式:

在这里,我也把 C++ 学习初略的分为几个层次,并且提供一些参考学习路线给大家:

如果你之前没有 C 或者其它语言的基础,我建议看看网上的 C++ 入门教程,比如菜鸟教程、C 语言中文网上面。

这个过程你需要了解并且掌握所有编程语言中共同的、最基本的那些概念:

变量、常量、类型、循环、判断、数组、字符串、对象、输入输出等

然后还有 C++ 中一些特有的东西,比如命名空间 namespace、引用、模板等。

然后就是辅以大量的练习。

就那种 C++ 教程的课后练习题就足够了,类似水仙花数、四则运算计算器之类的东西。

如果不知道做什么的话,可以试试这个免费的三天实战项目,可以检验一下学习效果:

如果对这些没什么兴趣,可以试试这个网站,

有点像 LeetCode 刷算法题一样,这里针对每一个语法知识点都有一系列的练习题可供选择。

而且不仅包含 C++,其它几乎所有语言都可以在这里进行练习:

应该两三周就能过完菜鸟教程这种级别的指引吧。

到这里,你对 C++ 包含了哪些知识点大概有了一个整体的印象。

并且能够写上百行左右的程序,但是还是很难写出一个优秀的类。

接下来需要进行全面和深入的学习,算是真正的入门:

  • 《Accelerated C++》(美国斯坦福大学的经典教材)

这三本,其实各有优缺点,第一本优点是简短,仅仅两三百页,只有最为核心和主干的知识点。

这两本区别在于,一个是 C++ 大师所著,一本是 C++ 之父所著。

网上有人说 《C++Primer》是目前市面上唯一一本真正的从入门到精通的书,适合初学者;

对于这种上前页大部头我推荐的阅读方式是,以主题为划分,比如 C++ Primer 就明确的分为了:

如果有一定的基础的话,可以看着目录,看一些自己感兴趣的章节,完全没有必要从第一页开始挨着挨着读。

入门结束你应该掌握以下内容:

  • 字符串处理(类库和正则表达式)

看着只有几个关键字,实际上每个展开都有很多内容需要学习。

学习过程中把后面的每一个练习题都自己敲一遍,自己多思考对比一下。

多用代码去验证自己的想法,尤其是指针、引用、构造、析构这些地方。

学习 C++ 以及日常开发一定要记得这几个网站,可以随时查阅一些语法的用法和标准库:

看完 C++ Primer 这类书,写出来的代码在效率、规范上还是没那么 “C++”。

甚至会有内存方面的 Bug。

由于 C++ 是一门系统级编程的语言,你需要掌握一些 OS 方面的知识才能更好的使用。

尤其是内存编译链接这一块,比如堆、栈、静态链接、动态链接等等。

还有一些 C++ 里比较特殊的概念,比如 RAII 的资源管理方式、值语义与生命期、引用、右值引用等等。

这些东西似乎没有一本很系统的书籍可以帮助你掌握,只能在不同的书里吸收完善。

这里给出一些在这些方面有帮助的书籍:

一言概括,就是帮助你快速习得一些 C++ 里正确的姿势。 否则你可能需要用几万行代码的经验才能慢慢悟出来。
  • 《程序员自我修养》& 《CSAPP》
帮助你掌握一些系统级编程的知识。 如内存管理、堆栈、链接这类在 C、C++ 中极其重要的概念。
  • 《Linux多线程服务端编程》
这本书严格来说不是纯讲 C++ 的。 但是里面会有一些章节,关于 C++ 多线程编程、锁、线程安全、C++ 一些工程实践经验还不错。
谷歌的 C++ 代码规范,写代码是一件专业的事,把代码写得漂亮、专业也是一项能力。 谷歌的代码规范算是 C++ 领域一个标杆了。

鹅厂很多代码规范也是基于谷歌的代码规范做了一些适应性的改进。

在学习编程之初就掌握良好的编码规范大有裨益。

上面提到的这些书重点在于如何使用、用好 C++ 这一个范畴。

而进阶,我认为则是研究语言一些 case 的具体实现,深刻的思考语言设计和演进本身。

侯捷老师说:源码之下,了无秘密。

为了更好的使用 STL,一个方法就是阅读 STL 源码 或者掌握部分实现:

这本书讲解了 STL 五大组件的底层实现。 包括内存管理、各类容器的数据结构实现、算法的实现等。 建议列为必读,可以帮助深入理解 STL 底层。 其中也有很多面试常考的知识点,如内存池、traits 技法、vector 动态扩容、set、map 等实现原理等。

《深度探索C++对象模型》

这本书其实就是围绕一个点:C++ 里的对象是在内存中是如何组织的。
  • 构造、解构、拷贝语意学

我第一次看见这本书就被深深的吸引了,当时在学校,每天看八九个小时,花了大概一周刷完了。

看完这本书感觉自己对于 C++ 的底层实现机制有了更深的理解。

比如多重继承、菱形继承、虚函数底层的实现机制等等。

当然了,也有人会认为对象如何在底层实现属于 C++ 编译器实现细节,而非语言标准,不应该以实现细节倒推标准。

诚然如此,掌握实现细节还是会对你理解 C++ 有促进作用。

设计与演化这本书重点在于通过 C++ 之父去窥见 C++ 的前世今生。

看完这本书的意义,功利一点来说,或许对于提高 C++ 编程能力没有太多帮助的,不像 Effective 是立竿见影的效果。

但是,对于加深对 C++ 的理解很有帮助。

想要更好的使用 C++ 构建好的、高效的系统,对语言本身的深入理解是先决条件。

另一方面,书中提到了很多语言设计的思想、哲学,这些,相信在学习其他编程语言的时候也是有帮助的。

这篇文章中对于书籍,我的一个原则就是能省则省,因为 C++ 相关的优秀书籍实在太多了,我只想挑出每个阶段最有用的的书。

看书也是一样的,我推荐书不一定都需要去看完,深入细致的阅读完一本技术书比走马观花似的阅读 N 本更有效。

当然了,后面我也会推出一份分门别类整理后的 C++ 书单供大家索引。

对于初学者来说看书也许确实很难 get 到那个点,就像我大一看 C 语言的教材里说文件分为文本流文件和二进制流文件,当时我愣是理解不了。

很多对于会的人是常识的东西,对于初学者就是无法理解、很难的概念。

那也许通过别人讲授、视频的方式会更容易入门一点,这里推荐浙大翁凯的 C++ 视频。

翁凯老师无论是 C、C++、Java 的视频都讲得非常深入浅出,只能说水平越是高的人讲的课越容易明白。

另外还要推荐侯捷老师的一些列课程:

我当时看见这些标题:《内存管理》、《C++11》、《STL源码分析》......

简直如获至宝一样,一个寒假就把这些视频全看完了,对于 C++ 和内存管理方面理解提高了很多。

侯捷-C++程序的生前和死后

真的非常感谢 B 站、感谢这些讲师和分享者,甚至要感谢互联网时代!

(PS:侯捷 C++ 视频课程一直都被看过的同学广为推荐,最近发现 B 站关于侯捷老师的 C++ 视频课程几乎全部被下架了,于是自己搜集了一套非常全的视频,大家赶紧去下载保存备用:

他们让知识的传播变得更加的便捷,降低了后来者的学习门槛,当然啦也变相加重了内卷化hahah(逃

还有一个我最近发现的一个视频,是一个国外 C++ 游戏引擎开发工程师录制的一套偏向 talk 类型的教程,比较通俗易懂和深入浅出,

送给学习 C++ 的同学一段翁凯老师讲课说的话:

学 C++ (计算机)一定要有一个非常强大的心理状态 什么呢 C++ (计算机)的所有东西都是人做出来的,别人能想出来的我也一定想得出来,在 C++(计算机)里头没有任何黑魔法,所有的东西只不过是我现在不知道而已 总有一天我会把它里面的细节搞明白的!

另外,在这里也送大家一本帮助我拿到BAT 等一线大厂 offer 的算法笔记,是一位阿里大神写的,对于算法薄弱或者需要提高的同学都十分受用,算法一定是计算机学习的重中之重:

觉得不错的话,记得关注我

更新:面经上篇最新整理,先发完几篇重复的,后续知乎同步更新

2020届应届渣硕,基于实习和秋招的面试,拿到了微软、阿里、商汤、滴滴、华为、海康、平安、陌陌等offer,下面总结一些经验,希望对大家有所帮助,有问题之处也可以随时指出。 如果侵犯公司隐私,烦请告知,此文仅做分享之用。

最开始是以公司为单位进行总结,实习经验可以参考这里。

后面我发现,各公司面试问题存在较多重复,于是按照题目类型分门别类,而不是按照公司机械划分。简单分为深度学习、机器学习基础、图像处理基础、数学基础、算法基础、程序设计语言、模型部署、HR面试以及与我本人简历相关的目标检测、属性识别、Kaggle及天池的比赛、创新想法等几个部分介绍,可能开始会有重叠或者分类不恰当,后面会逐渐更新完善。其中第一篇先介绍到HR面试,第二篇介绍个人相关的项目和比赛部分。

那么ResNet解决了什么问题呢?

当深层网络能够开始收敛,会引起网络退化(degradation problem)问题,即随着网络深度增加,准确率会饱和,甚至下降。这种退化不是由过拟合引起的,因为在适当的深度模型中增加更多的层反而会导致更高的训练误差。

ResNet就通过引入深度残差连接来解决网络退化的问题,从而解决深度CNN模型难训练的问题。

1.2 resnet两种结构具体怎么实现,bottleneck的作用,为什么可以降低计算量,resnet参数量和模型大小

1.4 知道哪些移动端/轻量化模型

2.1 卷积神经网络结构特点

2.3 深度可分离卷积

原理,为什么降低计算量,口述计算,减少了多少

具体怎么学的,对偏移有没有什么限制

3.1 BN的原理、作用和实现细节,

其中均值和标准差的计算,以及训练和测试时分别怎么用

如果数据不是高斯分布,bn后怎么恢复

有哪些,为什么使用激活函数

3.4 过拟合/欠拟合,预防方法

正则化具体怎么做,为什么有效

3.5 梯度消失/梯度爆炸

关于神经网络的调参顺序? - Miracle的回答 - 知乎

3.10 深度神经网络和深度学习区别

机器学习是很多种方法和模型的总称。

神经网络是一种机器学习模型,可以说是目前最火的一种。

深度神经网络就是层数比较多的神经网络。

深度学习就是使用了深度神经网络的机器学习。

3.11 深度学习为什么比机器学习好

3.13 如果训练集不平衡,测试集平衡,直接训练和过采样欠采样处理,哪个更好

softmax得出的结果是排序的么,为什么分类用交叉熵

3.16 梯度物理意义,小球下滚,如果坡很陡,会怎么样,梯度的大小和方向

3.18 监督学习和非监督学习举例

周志华机器学习绪论1.3

3.21 如果模型不收敛,怎么调节

3.23 解释梯度下降

此处推荐几个面试必备书籍

可能因为简历上可问的东西比较多,面试时间有限,机器学习相关问的不是很多,推荐看一下李航那本统计学习方法。

3.选择传统机器学习还是深度学习的标准是什么

bagging和随机森林的区别

1.数字图像处理,各种滤波

2.进行过哪些数据预处理

空图,坏图,单通道图,多通道图等一些情况会怎么处理

其实主要就是概率与统计相关

1.概率:圆上任意三个点组成的三角形,包含圆心的概率

4.先验概率,后验概率,怎么转换

5.坐标0开始,依次走1,2,3,。。。,n步,可以左或者右,问有没有到不了的位置

加问,到指定位置m,至少需要多少步 (1)没有到不了的,因为左x右x+1,每次走一步,可以到达所有位置 (2)先求最接近m的连续和,然后从里面选两个数作差

6.n个门,1个后门是车,其余n-1个后门是羊,你先选一个,如果面试官告诉你其余n-1个中某个是羊,你会重新选择么

你先选一个,概率1/n 面试官告诉你某个不是,你在剩余中选的概率为两部分 (1)你选的那个是,则概率0 (2)你选的不是,(n-1)/n * 1/(n-2),即你第一次选的不是的情况下剩余n-2中选的是的概率 所以,n=3为2/3,重新选更优

7.三个盒子,一个盒子两个红球,一个盒子一红一蓝,第三个盒子两个蓝球。一人随机选了一个盒子,并摸出一个红球,请问这个盒子里另外一个也是红球的概率是多少

2/3概率选了第一个盒子

该部分主要是手撕代码,也是面试的重要组成部分

可能因为我本科非计算机,题目大都相对简单,不过一次0 bug完成还是需要练习。

1.x的n次方(x任意,n自然数)

2.链表排序(然后不能动指针)

给定一个字符串和一个数字,删除指定数字个数的字符,并保证删除

改:大数组删掉指定个数,怎么最方便。

6.二叉树深度及最长路径

知道哪些排序算法,快排时间复杂度,时间复杂度推导,O(n)的排序方法

时间复杂度O(n)的排序算法

8.二叉树路径和为给定值

9.一个数组,其他数出现两次,另一个出现一次,找出

改进:另外两个数出现一次

10.链表中倒数第k个结点

11.判断链表对称/链表回文

15.算法:连续子数组的最大和

剑指offer(三十)

16.算法:最长不重复子串

典型题.求一个数组中只包含0,1使得其中0,1个数相等的最大子数组

19 n个文件(海量文件),查找和排序,二分查找时间复杂度

20 一个数组里面是股票值,求什么时候购买和卖出,收益最大。

一个数记录最大差,一个记录最小元素,遍历一次即可

21. 最长连续公共子串

A是一个排序好的数组,升序排列; B是一个排序好的数组,升序排序; 给定c,找到a,b,满足 a属于A b属于B a+b=c

25.二维数组求最大和矩阵

26.二维数组有多少个子数组

包含一行的,第一行为例,一个的n个,两个的n-1个,。。。,n个的一个,一共n+(n-1)+。。。+1,n行就是n*。 而包含两行,三行就依次是(n-1)*, (n-2) *, 所以就是n+(n-1)+。。。+1的平方

27.二维矩阵左上角到右下角最大和

28.1-n数字里少一个,找出来

30.输入D和I组成的字符串,输出数字数组,D表示Decrease,I代表Incre。

(1)如果新增是I,则添加一size的数在最后 (2)如果新增是D,则前面都加一,然后最后添加0

32.判断两线段是否相交

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。

34.对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。

给定一个有序序列int[] vals,请返回创建的二叉查找树的高度。

35. 寻找两个元素异或的最大值。

39.根据顶点坐标,判断两个四边形/三角形是否相交

m支队伍两两比赛,赢了得3分,平局各得一分,输了不得分,求n个晋级名额中的最少得分。

42.给定一个不等概率生成器,随机生成 0 和1 的概率分别为 p 和1-p, p 不等于0.5,要求设计如下等概率生成器:

(1) 随机生成0 和1 的概率为0.5

可以构建一个二维表 00,01 10,11 对应的概率 p*p,(1-p)*p (1-p)*p,(1-p)*(1-p) 我们可以发现,01和10出现的概率相等,都是(1-p)*p 所以如果连续两次出现01,认为出现0; 如果出现10,认为出现1,出现其他重新掷即可实现等概率0.5

(2)随机生成0,1 和2 的概率为1/3

连续掷三次出现001,010,100三种等概率,都是1/3

(3) 随机生成0,1,2,…n-1 的概率为1/n

43. 给定n个数的数组,找到所有长度大于等于k的连续子数组中平均值最大的那个。返回那个最大的平均值。

44.在一个 m*n 整数矩阵中找到指定值 target, 这个整数矩阵有如下性质:

(1) 每行从左到右数值递增

(2)每列从上到下数值递增

45.给定一个无向图,这个图是在一棵树的基础上加上一条边构成的。问哪条边可以删掉使图重新变成一棵树?如果有多个答案那么输出输入的边中最后出现的那条

46.输入四个点的坐标,求证四个点是不是一个矩形

先计算中点坐标,然后计算其到四个顶点的距离是否相等

1.1 深拷贝和浅拷贝

如果list在函数里改变,原来的list是否改变

(1)指针是一个变量,存储的是一个地址,指向 内存的一个存储单元,它的内容是内存中的地址

(2)引用跟原来的变量实质上是同一个东西,只 不过是原变量的一个别名而已。

2.4 内存泄漏和溢出

2. 分布式,多卡使用

每个机器都有一个相同的完整的模型,然后分别处理不同的数据,最后server汇总结果;

把一个模型进行拆分,每个机器上是模型的一部分,然后每一部分模型在不同的机器处理,处理结果移交给下一个机器的部分继续处理。

(3)现在以数据并行为常用方式,模型并行主要难点在模型拆分上,二者通信量都很大。

中心化参见TF和MXNet 去中心化参见NCCL的处理方式

3.剪枝怎么做,剪多少,效果变化多少

4.量化怎么做,效果变化多少

2.希望做研究还是工程

3.有没有和人发生争执的经历

5.给你项目让你主导怎么规划

万万没想到之聪明的编辑
万万没想到之抓捕孔连顺

存在n+1个房间,每个房间依次为房间1 2 3…i,每个房间都存在一个传送门,i房间的传送门可以把人传送到房间pi(1<=pi<=i),现在路人甲从房间1开始出发(当前房间1即第一次访问),每次移动他有两种移动策略:

A. 如果访问过当前房间 i 偶数次,那么下一次移动到房间i+1;

B. 如果访问过当前房间 i 奇数次,那么移动到房间pi;

现在路人甲想知道移动到房间n+1一共需要多少次移动;

输出一行数字,表示最终移动的次数,最终结果需要对 (10e9 + 7) 取模。

开始从房间1 只访问一次所以只能跳到p1即 房间1, 之后采用策略A跳到房间2,房间2这时访问了一次因此采用策略B跳到房间2,之后采用策略A跳到房间3,因此到达房间3需要 4 步操作。

有三只球队,每只球队编号分别为球队1,球队2,球队3,这三只球队一共需要进行 n 场比赛。现在已经踢完了k场比赛,每场比赛不能打平,踢赢一场比赛得一分,输了不得分不减分。已知球队1和球队2的比分相差d1分,球队2和球队3的比分相差d2分,每场比赛可以任意选择两只队伍进行。求如果打完最后的 (n-k)场比赛,有没有可能三只球队的分数打平。

每行的比分数据,最终三只球队若能够打平,则输出“yes”,否则输出“no”

case1: 球队1和球队2 差0分,球队2 和球队3也差0分,所以可能的赛得分是三只球队各得1分

case2: 球队1和球队2差3分,球队2和球队3差3分,所以可能的得分是 球队1得0分,球队2得3分, 球队3 得0分,比赛已经全部结束因此最终不能打平。

有一个仅包含’a’和’b’两种字符的字符串s,长度为n,每次操作可以把一个字符做一次转换(把一个’a’设置为’b’,或者把一个’b’置成’a’);但是操作的次数有上限m,问在有限的操作数范围内,能够得到最大连续的相同字符的子串的长度是多少。

输出在操作次数不超过 m 的情况下,能够得到的 最大连续 全’a’子串或全’b’子串的长度。

把第一个 ‘b’ 或者第二个 ‘b’ 置成 ‘a’,可得到长度为 5 的全 ‘a’ 子串。

二阶魔方又叫小魔方,是222的立方形结构。每一面都有4个块,共有24个块。每次操作可以将任意一面逆时针或者顺时针旋转90°,如将上面逆时针旋转90°操作如下。

Nero在小魔方上做了一些改动,用数字替换每个块上面的颜色,称之为数字魔方。魔方上每一面的优美度就是这个面上4个数字的乘积,而魔方的总优美度就是6个面优美度总和。

现在Nero有一个数字魔方,他想知道这个魔方在操作不超过5次的前提下能达到的最大优美度是多少。

魔方展开后每一块的序号如下图:

输入一行包含24个数字,按序号顺序给出魔方每一块上面的数字。所有数大小范围为[-100,100]。

输出一行包含一个数字,表示最大优美度。

有一个推箱子的游戏, 一开始的情况如下图:

上图中, ‘.’ 表示可到达的位置, ‘#’ 表示不可到达的位置,其中 S 表示你起始的位置, 0表示初始箱子的位置, E表示预期箱子的位置,你可以走到箱子的上下左右任意一侧, 将箱子向另一侧推动。如下图将箱子向右推动一格;

注意不能将箱子推动到’#'上, 也不能将箱子推出边界;

现在, 给你游戏的初始样子, 你需要输出最少几步能够完成游戏, 如果不能完成, 则输出-1。

后面为n行字符串,每行字符串有m字符, 表示游戏盘面;

一个数字,表示最少几步能完成游戏,如果不能,输出-1;

有n个房间,现在i号房间里的人需要被重新分配,分配的规则是这样的:先让i号房间里的人全都出来,接下来按照 i+1, i+2, i+3, … 的顺序依此往这些房间里放一个人,n号房间的的下一个房间是1号房间,直到所有的人都被重新分配。

现在告诉你分配完后每个房间的人数以及最后一个人被分配的房间号x,你需要求出分配前每个房间的人数。数据保证一定有解,若有多解输出任意一个解。

输出n个整数,代表每个房间分配前的人数。

【编码题】字符串S由小写字母构成,长度为n。定义一种操作,每次都可以挑选字符串中任意的两个相邻字母进行交换。询问在至多交换m次之后,字符串中最多有多少个连续的位置上的字母相同?

一个非负整数,表示操作之后,连续最长的相同字母数量。

使2个字母a连续出现,至少需要3次操作。即把第1个位置上的a移动到第4个位置。

所以在至多操作2次的情况下,最多只能使2个b或2个a连续出现。

为了不断优化推荐效果,今日头条每天要存储和处理海量数据。假设有这样一种场景:我们对用户按照它们的注册时间先后来标号,对于一类文章,每个用户都有不同的喜好值,我们会想知道某一段时间内注册的用户(标号相连的一批用户)中,有多少用户对这类文章喜好值为k。因为一些特殊的原因,不会出现一个查询的用户区间完全覆盖另一个查询的用户区间(不存在L1<=L2<=R2<=R1)。

输入: 第1行为n代表用户的个数 第2行为n个整数,第i个代表用户标号为i的用户对某类文章的喜好度 第3行为一个正整数q代表查询的组数 第4行到第(3+q)行,每行包含3个整数l,r,k代表一组查询,即标号为l<=i<=r的用户中对这类文章喜好值为k的用户的个数。 数据范围n <= 300000,q<=300000 k是整型

输出:一共q行,每行一个整数代表喜好值为k的用户的个数

有5个用户,喜好值为分别为1、2、3、3、5,

第一组询问对于标号[1,2]的用户喜好值为1的用户的个数是1

第二组询问对于标号[2,4]的用户喜好值为5的用户的个数是0

第三组询问对于标号[3,5]的用户喜好值为3的用户的个数是2

作为一个手串艺人,有金主向你订购了一条包含n个杂色串珠的手串——每个串珠要么无色,要么涂了若干种颜色。为了使手串的色彩看起来不那么单调,金主要求,手串上的任意一种颜色(不包含无色),在任意连续的m个串珠里至多出现一次(注意这里手串是一个环形)。手串上的颜色一共有c种。现在按顺时针序告诉你n个串珠的手串上,每个串珠用所包含的颜色分别有哪些。请你判断该手串上有多少种颜色不符合要求。即询问有多少种颜色在任意连续m个串珠中出现了至少两次。

一个非负整数,表示该手链上有多少种颜色不符需求。

第一种颜色出现在第1颗串珠,与规则无冲突。

第二种颜色分别出现在第 1,3,4颗串珠,第3颗与第4颗串珠相邻,所以不合要求。

第三种颜色分别出现在第1,3,5颗串珠,第5颗串珠的下一个是第1颗,所以不合要求。

总计有2种颜色的分布是有问题的。

这里第2颗串珠是透明的。

产品经理(PM)有很多好的idea,而这些idea需要程序员实现。现在有N个PM,在某个时间会想出一个 idea,每个 idea有提出时间、所需时间和优先等级。对于一个PM来说,最想实现的idea首先考虑优先等级高的,相同的情况下优先所需时间最小的,还相同的情况下选择最早想出的,没有 PM 会在同一时刻提出两个 idea。

同时有M个程序员,每个程序员空闲的时候就会查看每个PM尚未执行并且最想完成的一个idea,然后从中挑选出所需时间最小的一个idea独立实现,如果所需时间相同则选择PM序号最小的。直到完成了idea才会重复上述操作。如果有多个同时处于空闲状态的程序员,那么他们会依次进行查看idea的操作。

求每个idea实现的时间。

输入第一行三个数N、M、P,分别表示有N个PM,M个程序员,P个idea。随后有P行,每行有4个数字,分别是PM序号、提出时间、优先等级和所需时间。输出P行,分别表示每个idea实现的时间点。

输入第一行三个数N、M、P,分别表示有N个PM,M个程序员,P个idea。随后有P行,每行有4个数字,分别是PM序号、提出时间、优先等级和所需时间。全部数据范围 [1, 3000]。

注意:这是一道面向对象编程的算法题。

输出P行,分别表示每个idea实现的时间点。

P为给定的二维平面整数点集。定义 P 中某点x,如果x满足 P 中任意点都不在 x 的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复, 坐标轴范围在[0, 1e9) 内)

如下图:实心点为满足条件的点的集合。请实现代码找到集合 P 中的所有 ”最大“ 点的集合并输出。

第一行输入点集的个数 N, 接下来 N 行,每行两个数字代表点的 X 轴和 Y 轴。

输出“最大的” 点集合, 按照 X 轴从小到大的方式输出,每行两个数字分别代表点的 X 轴和 Y轴。

给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个:

区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可,不需要输出具体的区间。如给定序列 [6 2 1]则根据上述公式, 可得到所有可以选定各个区间的计算值:

从上述计算可见选定区间 [6] ,计算值为 36, 则程序输出为 36。

区间内的所有数字都在[0, 100]的范围内;

第一行输入数组序列长度n,第二行输入数组序列。

输出数组经过计算后的最大值。

P为给定的二维平面整数点集。定义P中某点x,如果x满足P中任意点都不在x的右上方区域内(横纵坐标都大于x),则称其为“最大的”。求出所有“最大的”点的集合。(所有点的横坐标和纵坐标都不重复,坐标轴范围在[0, 1e9]内)

如下图:实心点为满足条件的点的集合。


请实现代码找到集合P中的所有”最大“点的集合并输出。

第一行输入点集的个数N, 接下来N行,每行两个数字代表点的X轴和Y轴。1 ≤ n ≤ 500000

输出“最大的”点集合, 按照X轴从小到大的方式输出,每行两个数字分别代表点的X轴和Y轴。

给定一个数组序列,需要求选出一个区间,使得该区间是所有区间中经过如下计算的值最大的一个:

区间中的最小数*区间所有数的和

最后程序输出经过计算后的最大值即可,不需要输出具体的区间。如给定序列 [6 2 1]则根据上述公式,可得到所有可以选定各个区间的计算值:

从上述计算可见选定区间[6],计算值为36, 则程序输出为36。

区间内的所有数字都在[0, 100]的范围内;

第一行输入数组序列个数,第二行输入数组序列。

输出数组经过计算后的最大值。

产品经理(PM)有很多好的idea,而这些idea需要程序员实现。现在有N个PM,在某个时间会想出一个 idea,每个 idea 有提出时间、所需时间和优先等级。对于一个PM来说,最想实现的idea首先考虑优先等级高的,相同的情况下优先所需时间最小的,还相同的情况下选择最早想出的,没有 PM会在同一时刻提出两个 idea。

同时有M个程序员,每个程序员空闲的时候就会查看每个PM尚未执行并且最想完成的一个idea,然后从中挑选出所需时间最小的一个idea独立实现,如果所需时间相同则选择PM序号最小的。直到完成了idea才会重复上述操作。如果有多个同时处于空闲状态的程序员,那么他们会依次进行查看idea的操作。

求每个idea实现的时间。

输入第一行三个数N、M、P,分别表示有N个PM,M个程序员,P个idea。随后有P行,每行有4个数字,分别是PM序号、提出时间、优先等级和所需时间。

输出P行,分别表示每个idea实现的时间点。

数列的定义如下:数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。

输入数据有多组,每组占一行,由两个整数n(n<10000)和m(m<1000)组成,n和m的含义如前所述。

对于每组输入数据,输出该数列的和,每个测试实例占一行,要求精度保留2位小数。

春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=1^3 + 5^3 + 3^3。 现在要求输出所有在m和n范围内的水仙花数。

对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必须大于等于m,并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;如果给定的范围内不存在水仙花数,则输出no;每个测试实例的输出占一行。

ZJ18 万万没想到之聪明的编辑

我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我发现一个发现拼写错误的捷径:

  1. 三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> hello

  2. 两对一样的字母(AABB型)连在一起,一定是拼写错误,去掉第二对的一个字母就好啦:比如 helloo -> hello

  3. 上面的规则优先“从左到右”匹配,即如果是AABBCC,虽然AABB和BBCC都是错误拼写,应该优先考虑修复AABB,结果为AABCC

我特喵是个天才!我在蓝翔学过挖掘机和程序设计,按照这个原理写了一个自动校对器,工作效率从此起飞。用不了多久,我就会出任CEO,当上董事长,迎娶白富美,走上人生巅峰,想想都有点小激动呢!

万万没想到,我被开除了,临走时老板对我说: “做人做事要兢兢业业、勤勤恳恳、本本分分,人要是行,干一行行一行。一行行行行行;要是不行,干一行不行一行,一行不行行行不行。” 我现在整个人红红火火恍恍惚惚的……

请听题:请实现大锤的自动校对程序

第一行包括一个数字N,表示本次用例包括多少个待校验的字符串。

后面跟随N行,每行为一个待校验的字符串。

N行,每行包括一个被修复后的字符串。

ZJ19 万万没想到之抓捕孔连顺

我叫王大锤,是一名特工。我刚刚接到任务:在字节跳动大街进行埋伏,抓捕恐怖分子孔连顺。和我一起行动的还有另外两名特工,我提议

  1. 我们在字节跳动大街的N个建筑中选定3个埋伏地点。

  2. 为了相互照应,我们决定相距最远的两名特工间的距离不超过D。

我特喵是个天才! 经过精密的计算,我们从X种可行的埋伏方案中选择了一种。这个方案万无一失,颤抖吧,孔连顺!

万万没想到,计划还是失败了,孔连顺化妆成小龙女,混在cosplay的队伍中逃出了字节跳动大街。只怪他的伪装太成功了,就是杨过本人来了也发现不了的!

请听题:给定N(可选作为埋伏点的建筑物数)、D(相距最远的两名特工间的距离的最大值)以及可选建筑的坐标,计算在这次行动中,大锤的小队有多少种埋伏选择。

  1. 两个特工不能埋伏在同一地点

  2. 三个特工是等价的:即同样的位置组合(A, B, C) 只算一种埋伏方法,不能因“特工之间互换位置”而重复使用

第二行包含N个建筑物的的位置,每个位置用一个整数(取值区间为[0, 1000000])表示,从小到大排列(将字节跳动大街看做一条数轴)

一个数字,表示不同埋伏方案的数量。结果可能溢出,请对 取模

小包最近迷上了一款叫做雀魂的麻将游戏,但是这个游戏规则太复杂,小包玩了几个月了还是输多赢少。

于是生气的小包根据游戏简化了一下规则发明了一种新的麻将,只留下一种花色,并且去除了一些特殊和牌方式(例如七对子等),具体的规则如下:

总共有36张牌,每张牌是1~9。每个数字4张牌。

你手里有其中的14张牌,如果这14张牌满足如下条件,即算作和牌

14张牌中有2张相同数字的牌,称为雀头。

除去上述2张牌,剩下12张牌可以组成4个顺子或刻子。顺子的意思是递增的连续3个数字牌(例如234,567等),刻子的意思是相同数字的3个数字牌(例如111,777)

现在,小包从36张牌中抽取了13张牌,他想知道在剩下的23张牌中,再取一张牌,取到哪几种数字牌可以和牌。

输入只有一行,包含13个数字,用空格分隔,每个数字在1~9之间,数据保证同种数字最多出现4次。

输出同样是一行,包含1个或以上的数字。代表他再取到哪些牌可以和牌。若满足条件的有多种牌,请按从小到大的顺序输出。若没有满足条件的牌,请输出一个数字0

可以组成1,2,6,7的4个刻子和9的雀头

0

请不要根据自己的常识为题目增加未提及的条件

对于20%的数据,保证和牌时一定是4个刻子+雀头的形式

小明是一名算法工程师,同时也是一名铲屎官。某天,他突发奇想,想从猫咪的视频里挖掘一些猫咪的运动信息。为了提取运动信息,他需要从视频的每一帧提取“猫咪特征”。一个猫咪特征是一个两维的vector<x, y>。如果x_1=x_2 and y_1=y_2,那么这俩是同一个特征。

因此,如果喵咪特征连续一致,可以认为喵咪在运动。也就是说,如果特征<a, b>在持续帧里出现,那么它将构成特征运动。比如,特征<a, b>在第2/3/4/7/8帧出现,那么该特征将形成两个特征运动2-3-4 和7-8。

现在,给定每一帧的特征,特征的数量可能不一样。小明期望能找到最长的特征运动。

第一行包含一个正整数N,代表测试用例的个数。

每个测试用例的第一行包含一个正整数M,代表视频的帧数。

接下来的M行,每行代表一帧。其中,第一个数字是该帧的特征个数,接下来的数字是在特征的取值;比如样例输入第三行里,2代表该帧有两个猫咪特征,<1,1>和<2,2>

所有用例的输入特征总数和<100000

特征取值均为非负整数。

对每一个测试用例,输出特征运动的长度作为一行

特征<1,1>在连续的帧中连续出现3次,相比其他特征连续出现的次数大,所以输出3

如没有长度大于2的特征运动,返回1

ZJ22 毕业旅行问题

小明目前在做一份毕业旅行的规划。打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次。由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的花销。给定一组城市和每对城市之间的火车票的价钱,找到每个城市只访问一次并返回起点的最小车费花销。

城市个数n(1<n≤20,包括北京)

城市间的车票价钱 n行n列的矩阵 m[n][n]

共 4 个城市,城市 1 和城市 1 的车费为0,城市 1 和城市 2 之间的车费为 2,城市 1 和城市 3 之间的车费为 6,城市 1 和城市 4 之间的车费为5,依次类推。假设任意两个城市之间均有单程票可购买,且票价在1000元以内,无需考虑极端情况。

Z国的货币系统包含面值1元、4元、16元、64元共计4种硬币,以及面值1024元的纸币。现在小Y使用1024元的纸币购买了一件价值为N(0<N≤1024)的商品,请问最少他会收到多少硬币?

一行,包含一个数,表示最少收到的硬币数。

花200,需要找零824块,找12个64元硬币,3个16元硬币,2个4元硬币即可。

ZJ24 机器人跳跃问题

机器人正在玩一个古老的基于DOS的游戏。游戏中有N+1座建筑——从0到N编号,从左到右排列。编号为0的建筑高度为0个单位,编号为i的建筑的高度为H(i)个单位。

起初, 机器人在编号为0的建筑处。每一步,它跳到下一个(右边)建筑。假设机器人在第k个建筑,且它现在的能量值是E, 下一步它将跳到第个k+1建筑。它将会得到或者失去正比于与H(k+1)与E之差的能量。如果 H(k+1) > E 那么机器人就失去 H(k+1) - E 的能量值,否则它将得到 E - H(k+1) 的能量值。

游戏目标是到达第个N建筑,在这个过程中,能量值不能为负数个单位。现在的问题是机器人以多少能量值开始游戏,才可以保证成功完成游戏?

第一行输入,表示一共有 N 组数据.

第二个是 N 个空格分隔的整数,H1, H2, H3, …, Hn 代表建筑物的高度

输出一个单独的数表示完成游戏所需的最少单位的初始能量

头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队,每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来,在选题之前,我们对题目进行了盲审,并定出了每道题的难度系统。一场考试包含3道开放性题目,假设他们的难度从小到大分别为a,b,c,我们希望这3道题能满足下列条件:

所有出题人一共出了n道开放性题目。现在我们想把这n道题分布到若干场考试中(1场或多场,每道题都必须使用且只能用一次),然而由于上述条件的限制,可能有一些考试没法凑够3道题,因此出题人就需要多出一些适当难度的题目来让每场考试都达到要求,然而我们出题已经出得很累了,你能计算出我们最少还需要再出几道题吗?

输入的第一行包含一个整数n,表示目前已经出好的题目数量。

第二行给出每道题目的难度系数d1,d2,…,dn。

在样例中,一种可行的方案是添加2个难度分别为20和50的题目,这样可以组合成两场考试:(20 20 23)和(35,40,50)。

输出只包括一行,即所求的答案。

给定整数m以及n各数字A1,A2,…An,将数列A中所有元素两两异或,共能得到n(n-1)/2个结果,请求出这些结果中大于m的有多少个。

第一行包含两个整数n,m.

第二行给出n个整数A1,A2,…,An。

输出仅包括一行,即所求的答案

给定整数n和m, 将1到n的这n个整数按字典序排列之后, 求其中的第m个数。

输入仅包含两个整数n和m。

输出仅包括一行, 即所求排列中的第m个数字.

我要回帖

更多关于 跨境电商怎么做 的文章

 

随机推荐