今日头条_在线编程题

头条校招

头条校招

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

a<=b<=c b-a<=10 c-b<=10

Ler Mais

算法专题_贪心法

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

Ler Mais

算法专题_归并排序

归并排序是分治法思想的典型应用。归并排序要处理好两件事,划分和合并。划分就是将待排序序列划分成子序列。合并就是如何将两个有序的子序列合并为一个有序的子序列。

归并的排序的思想是:首先把原来序列划分成n个子序列,每个子序列一个元素,这样每个子序列都可以看作是有序的。然后分别合并相邻的两个子序列,使合并之后的序列保持有序。这样,一趟归并之后子序列减少二分之一,直到最后归并为一个序列为止。

Ler Mais

算法专题_二叉堆

堆,或者更准确的叫作二叉堆,是一种特殊的完全二叉树,通常分为最大堆和最小堆。最大堆是指堆顶的元素最大,堆顶的左右孩子的值小于等于它,然后左右子树也满足这个条件。最小堆是指堆顶的元素最小,左右孩子大于等于堆顶元素,左右子树也满足这个条件。 可以看到,堆是递归定义了,而且是一种完全二叉树。节点之间是有大小次序关系的。但是左右子树是没有顺序的。而二叉搜索树左右孩子是有次序的,不能颠倒。

既然堆是完全二叉树,就可以使用数组来简便的表示一棵树。假设一个节点的下标是i,那么它的左孩子为2*i,右孩子为2*i+1,父节点为i/2. 本文主要介绍二叉堆的构建,调整和有关应用(堆排序和优先队列)。注意这里假设根节点的标号是1.

如果根节点是从0开始标号的,那么对于节点i, 左孩子为2*i+1,右孩子为2*i+2,父节点为(i-1)/2.

Ler Mais

机器学习_Numpy使用技巧

NumPy的主要对象是齐次多维数组。表由相同类型的元素组成(通常为数字),由一个正整数元组索引。在NumPy中维数被称为轴,轴数称为秩。例如,一个三维空间中点的坐标[1,2,1]是一个秩为1的数组,因为其轴数为1,轴的长度为3。在下图中,数组的秩为2(2维),第二维的长度为3。

1
2
[[ 1., 0., 0.],
[ 0., 1., 2.]]

Ler Mais