算法面试题
NickChen_0411
学生
展开
-
116. Populating Next Right Pointers in Each Node
You are given aperfect binary treewhereall leaves are on the same level, and every parent has two children. The binary tree has the following definition:struct Node { int val; Node *left; ...原创 2019-04-18 12:02:54 · 235 阅读 · 0 评论 -
SVM(python实现)
看《机器学习(西瓜书)》可以理解SVM的推导过程,重点是看附录理解“对偶问题”,以及核函数的定义。SVM的代码主要是SMO算法的实现,主要参考《统计学习方法》,即如何选择pair进行优化,收敛后即可得到α、w、b代码:# _*_ coding:utf-8 _*_from numpy import *def loadDataSet(filename): #读取数据 dat...转载 2018-12-28 18:20:30 · 4569 阅读 · 0 评论 -
字符串匹配——KMP(C++实现)
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上有很多解释,但读起来都很...转载 2018-12-11 17:50:02 · 1861 阅读 · 0 评论 -
Astar A*算法 最短路径算法
通常情况下,迷宫寻路算法可以使用深度优先或者广度优先算法,但是由于效率的原因,不会直接使用这些算法,在路径搜索算法中最常见的就是A*寻路算法。使用A*算法的魅力之处在于它不仅能找到地图中从A到B的一条路径,还能保证找到的是一条最短路径,它是一种常见的启发式搜索算法,类似于Dijkstra算法一样的最短路径查找算法,很多游戏应用中的路径搜索基本都是采用这种算法或者是A*算法的变种。下面我们来了解...转载 2018-12-10 20:23:31 · 6706 阅读 · 0 评论 -
ID3决策树(python实现)
决策树的生成(该函数是一个递归的过程)CreateTree输入:数据集、特征 输出:字典型数据——决策树 a、判断是否满足停止划分的条件 若当前数据集的属性值为空,则投票表决当前样本中最多的类别 若当前所有的样本类别相同,则返回当前数据的类别。b、寻找当前数据的最佳划分特征 c、将最佳特征作为关键字,保存到字典中 d、从当前的属性集合中删除该最佳特征 e、遍历该最佳划分特征的...转载 2018-12-19 21:59:56 · 768 阅读 · 1 评论 -
KNN(python实现)
kNN算法流程一般情况下,kNN有如下流程: (1)收集数据:确定训练样本集合测试数据; (2)计算测试数据和训练样本集中每个样本数据的距离;常用的距离计算公式: 欧式距离公式:d(x,y)=∑ni=1(xi−yi)2−−−−−−−−−−−−√d(x,y)=∑i=1n(xi−yi)2 曼哈顿距离公式:d(x,y)=∑ni=1|xi−yi|d(x,y)=∑i=1n|xi−yi|(...转载 2018-12-19 21:52:07 · 2610 阅读 · 0 评论 -
SGU326 perspective 最大流 竞赛排名问题
题目大意:有n支NBA球队,这些队伍属于同一个半区,已知各队目前已经赢了几场以及还要打几场(赢了的场次和没打的场次不一定是和 相同半区内的对手),另外已知一个n * n的矩阵,a[i][j]代表i和j还要打的比赛场数。根据这些条件,请问队伍1有没有获得半区冠军的可能性 (若积分相同则均为冠军); 方法:构出图来是四列的网络流问题:第一列为源点,第二列为代表不含1的比...转载 2018-12-06 16:33:36 · 589 阅读 · 0 评论 -
最大流之Ford-Fulkerson算法(C++实现)
本文主要讲解最大流问题的Ford-Fulkerson解法。可是说这是一种方法,而不是算法,因为它包含具有不同运行时间的几种实现。该方法依赖于三种重要思想:残留网络,增广路径和割。一、残留网络顾名思义,残留网络是指给定网络和一个流,其对应还可以容纳的流组成的网络。具体说来,就是假定一个网络G=(V,E),其源点s,汇点t。设f为G中的一个流,对应顶点u到顶点v的流。在不超过C(u,v)的条件...转载 2018-12-06 15:21:30 · 5076 阅读 · 2 评论 -
霍夫曼编码(C++ 优先队列)
霍夫曼编码 一般采用前缀编码 -- -- 对字符集进行编码时,要求字符集中任一字符的编码都不是其它字符的编码的前缀,这种编码称为前缀(编)码。算法思想:构造哈夫曼树非常简单,将所有的节点放到一个队列中,用一个节点替换两个频率最低的节点,新节点的频率就是这两个节点的频率之和。这样,新节点就是两个被替换节点的父节点了。如此循环,直到队列中只剩一个节点(树根)。 其实这就是一个贪心策略,属于...转载 2018-12-12 20:57:51 · 1906 阅读 · 1 评论 -
单源最短路径——迪杰斯特拉(Dijkstra)算法 C++实现
求最短路径之Dijkstra算法Dijkstra算法是用来求单源最短路径问题,即给定图G和起点s,通过算法得到s到达其他每个顶点的最短距离。基本思想:对图G(V,E)设置集合S,存放已被访问的顶点,然后每次从集合V-S中选择与起点s的最短距离最小的一个顶点(记为u),访问并加入集合S。之后,令u为中介点,优化起点s与所有从u能够到达的顶点v之间的最短距离。这样的操作执行n次(n为顶点个数)...转载 2018-12-03 16:24:39 · 12314 阅读 · 0 评论 -
POJ - 3259 Wormholes(多种方法求负权回路)+译文
While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way path that delivers you to its destination at a time that i...转载 2018-12-05 20:45:39 · 557 阅读 · 1 评论 -
随机抽样一致算法(Random sample consensus,RANSAC 简单版)PYTHON实现
一、RANSAC理论介绍普通最小二乘是保守派:在现有数据下,如何实现最优。是从一个整体误差最小的角度去考虑,尽量谁也不得罪。RANSAC是改革派:首先假设数据具有某种特性(目的),为了达到目的,适当割舍一些现有的数据。给出最小二乘拟合(红线)、RANSAC(绿线)对于一阶直线、二阶曲线的拟合对比:可以看到RANSAC可以很好的拟合。RANSAC可以理解为一种采样的方式,所以对于...转载 2019-01-03 16:18:13 · 2103 阅读 · 0 评论 -
CART树用于回归应用(python实现)
一、CART ( Classification And Regression Tree) 分类回归树1、基尼指数:在分类问题中,假设有KK 个类,样本点属于第kk 类的概率为PkPk ,则概率分布的基尼指数定义为: 在CART 分类问题中,基尼指数作为特征选择的依据:选择基尼指数最小的特征及切分点做为最优特征和最优切分点。2、在回归问题中,特征选择及最佳划分特征值的依据是:划分后样...转载 2018-12-24 22:17:31 · 2041 阅读 · 3 评论 -
线段树的理解(转载)
http://www.cnblogs.com/TenosDoIt/p/3453089.html线段树的精髓在于:对区间做操作,可以高效实现,基本能保持每个操作的复杂度为O(logn) 线段树中的延迟标记概念...转载 2019-01-04 18:09:51 · 202 阅读 · 0 评论 -
103. Binary Tree Zigzag Level Order Traversal
Given a binary tree, return thezigzag level ordertraversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).For example:Given binary tre...原创 2019-04-17 21:21:05 · 195 阅读 · 0 评论 -
347. Top K Frequent Elements
Given a non-empty array of integers, return thekmost frequent elements.Example 1:Input: nums = [1,1,1,2,2,3], k = 2Output: [1,2]Example 2:Input: nums = [1], k = 1Output: [1]Note:You...原创 2019-04-14 10:56:40 · 209 阅读 · 0 评论 -
739. Daily Temperatures
Given a list of daily temperaturesT, return a list such that, for each day in the input, tells you how many days you would have to wait until a warmer temperature. If there is no future day for which...原创 2019-04-16 12:43:25 · 243 阅读 · 0 评论 -
322. Coin Change
You are given coins of different denominations and a total amount of moneyamount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money ...原创 2019-04-15 22:03:31 · 197 阅读 · 0 评论 -
面向对象编程(笔记)
1.复合 (类中含有其他类) has-a2.委托(类中含有其他类的指针)has-pointer-to3.继承 is-a原创 2019-01-16 17:03:20 · 337 阅读 · 1 评论 -
string class (字符串类的设计,带指针的class)
包括内容:深度拷贝:类中指针所指向的区域 需要拷贝new:先分配memory,再调用构造函数delete:先调用析构函数,再释放memory动态分配内存堆、栈的区别内存分配方式的可视化(release and debug)big three:拷贝构造、拷贝赋值、析构函数new/delete配合使用,注意加 [ ] 代码:mystring.h#ifn...原创 2019-01-15 21:58:12 · 637 阅读 · 0 评论 -
complex class (复数类的设计,不带指针的class)
包括内容有:合理使用:引用、const关键字形参尽量使用引用const 能加则比加运算符重载(一般设定为inline函数)友元函数:可直接使用类的private成员,提高程序运行效率尽量使用 冒号(:)的赋值方式对 构造函数进行初始化构造函数的函数重载类内定义的函数 == inline函数何时采用成员函数、何时采用全局函数临时类(Temporary obj...原创 2019-01-15 11:57:09 · 1370 阅读 · 0 评论 -
C++类有继承时,析构函数必须为虚函数
C++类有继承时,析构函数必须为虚函数。如果不是虚函数,则使用时可能存在内在泄漏的问题。 如果自己设计的C++类体系中存在继承关系,请注意父子类的析构函数关键字设置。虚函数是在基类中被声明为 virtual,并在派生类中重新定义的成员函数,可实现成员函数的动态重载。 当一个类作为基类时,它的析构函数应该为虚析构函数(基类析构函数前加virtual关键字),这样才能保证调用子类的析构函数。...转载 2019-01-18 21:17:28 · 1725 阅读 · 0 评论 -
Logistic回归(python实现)
一、逻辑回归(LogisticRegression) Logistic regression (逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性。之前在经典之作《数学之美》中也看到了它用于广告预测,也就是根据某广告被用户点击的可能性,把最可能被用户点击的广告摆在用户能看到的地方,然后叫他“你点我啊!”用户点了,你就有钱收了。这就是为什么我们的电脑现在广告泛滥的原...转载 2018-12-26 12:01:29 · 6267 阅读 · 0 评论 -
朴素贝叶斯分类(python实现)
引文:前面提到的K最近邻算法和决策树算法,数据实例最终被明确的划分到某个分类中,下面介绍一种不能完全确定数据实例应该划分到哪个类别,或者说只能给数据实例属于给定分类的概率。基于贝叶斯决策理论的分类方法之朴素贝叶斯优点:在数据较少的情况下仍然有效,可以处理多类别问题缺点:对于输入数据的准备方式较为敏感适用数据类型:标称型数据。朴素贝叶斯的一般过程收集数据:可以使用任何方式准备数据:需...转载 2018-12-25 22:06:51 · 1383 阅读 · 0 评论 -
最短路径---Floyd算法(C++)
Floyd算法的介绍算法的特点: 弗洛伊德算法是解决任意两点间的最短路径的一种算法,可以正确处理有向图或有向图或负权(但不可存在负权回路)的最短路径问题,同时也被用于计算有向图的传递闭包。算法的思路通过Floyd计算图G=(V,E)中各个顶点的最短路径时,需要引入两个矩阵,矩阵S中的元素a[i][j]表示顶点i(第i个顶点)到顶点j(第j个顶点)的距离。矩阵P中的元素b[i][j],表...转载 2018-12-05 20:32:31 · 5695 阅读 · 2 评论 -
最短路径---SPFA算法(C++)
适用范围:给定的图存在负权边,这时类似Dijkstra等算法便没有了用武之地,而Bellman-Ford算法的复杂度又过高,SPFA算法便派上用场了。 我们约定有向加权图G不存在负权回路,即最短路径一定存在。当然,我们可以在执行该算法前做一次拓扑排序,以判断是否存在负权回路,但这不是我们讨论的重点。算法思想:我们用数组d记录每个结点的最短路径估计值,用邻接表来存储图G。我们采取的方法是动态逼近...转载 2018-12-07 23:03:33 · 2465 阅读 · 1 评论 -
最小生成树之kruskal(克鲁斯卡尔)算法(C++实现)
参考博客:https://blog.csdn.net/YF_Li123/article/details/75195549 最小生成树之kruskal(克鲁斯卡尔)算法kruskal算法:同样解决最小生成树的问题,和prim算法不同,kruskal算法采用了边贪心的策略,思想要比prim算法简单。算法基本思想:在初始状态时隐去图中的所有边,这样图中每个顶点都自成一个连通块。之后执行下...转载 2018-12-01 20:58:49 · 4318 阅读 · 0 评论 -
归并排序(面试手写版)
#include <iostream>#include <vector>using namespace std;void merge(vector<int>& A, vector<int> L, vector<int> R) { int l = L.size(); int r = R.size(); ...原创 2018-05-04 18:09:54 · 776 阅读 · 0 评论 -
快排(面试手写版)
#include <iostream>using namespace std;int helper(int arr[], int left, int right) { int key = arr[right]; int k = left; for(int i = left; i < right; ++i) { if(arr[i] &l...原创 2018-05-04 17:22:09 · 1283 阅读 · 0 评论 -
29.最小的K个数/face++面试算法题
题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。1.思路一:最简单的方法是先对数组进行快排,再取前K个数,时间复杂度O(N)代码一:class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> inp...转载 2018-03-22 12:24:31 · 353 阅读 · 0 评论 -
今日头条2018笔试第二题
1.题意:输入一个长度为n个a的字符串,有一下两种操作:1. m = s, s = s * 2;2.s = s + m;初始状态,s = 'a', m = 'a',问至少需要多少步操作,可以得到n个a的字符串。 2.思路:BFS和DFS都可以,但求最少操作数,可先考虑BFS,应为当BFS第一次找到答案时一定为做少的操作情况,且DFS内存容易爆。用pair<int, int>来表示当前...转载 2018-03-25 17:23:13 · 1392 阅读 · 0 评论 -
网易游戏研发工程师笔试题
题目描述小Q最近被邀请去参加了网易最牛大脑的节目,挑战数字魔方的项目。 数字魔方为一个3x3的矩阵,矩阵中的每个数字都是(1…9)中的数字,且数字魔方中的数字可能重复。每4个相邻的数字我们称为1个子魔方,整个数字魔方共有4个子魔方(如下图所示)。每一次操作可以选择对某个子魔方顺时针旋转90度,180度或者270度。每个子魔方可以进行多次操作。 对子魔方1进行一次操作,顺时针旋转90度,180度,2...原创 2018-03-18 18:19:13 · 7970 阅读 · 0 评论 -
(阿里面试题)计算一个字符串中出现次数第二多的字符
1.思路1.运用哈希表(unordered_map),将每个字符出现的次数记录下来;由于哈希表(key-value)没有对value进行排序的函数,因此用vector<pair<char, int>> vec(m.begin(), m.end()); 将哈希表转为保存pair<char, int>的容器,再自定义cmp函数对容器内的元素按照int的值进行降序排序...原创 2018-03-09 21:37:13 · 5415 阅读 · 0 评论 -
421.Maximum XOR of Two Numbers in an Array 数组中异或值最大的两个数字
Given a non-empty array of numbers, a0, a1, a2, … , an-1, where 0 ≤ ai < 231.Find the maximum result of ai XOR aj, where 0 ≤ i, j < n.Could you do this in O(n) runtime?Example:Input: [3, 10, 5, ...转载 2018-03-15 22:59:56 · 563 阅读 · 0 评论 -
拼多多2018校招内推编程题汇总
[编程题] 最大乘积时间限制:1秒 空间限制:32768K给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1) 输入描述: 无序整数数组A[n]输出描述: 满足条件的最大乘积输入例子1: 3 4 1 2输出例子1: 24#include <iostream>#include <algorithm>#include原创 2017-08-13 21:56:16 · 731 阅读 · 0 评论 -
腾讯2017秋招笔试编程题
1.[编程题] 编码时间限制:1秒 空间限制:32768K假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa, aaaa, aaab, aaac, … …, b, ba, baa, baaa, baab, baac … …, yyyw, yyyx, yyyy 其中a的Index为0,aa的Index为1,aaa原创 2017-07-11 17:53:36 · 984 阅读 · 0 评论 -
腾讯2017暑期实习生编程题目
1.[编程题] 构造回文时间限制:1秒 空间限制:32768K给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.输出描述: 对于每组数据,输出一个整数,代表最少需要删除的字符个数。输入例子1: abcda google输出原创 2017-07-10 22:22:29 · 336 阅读 · 0 评论 -
阿里巴巴2019线上笔试(之一)
光明小学的小朋友们要举行一年一度的接力跑大赛了,但是小朋友们却遇到了一个难题:设计接力跑大赛的线路,你能帮助他们完成这项工作么?光明小学可以抽象成一张有N个节点的图,每两点间都有一条道路相连。光明小学的每个班都有M个学生,所以你要为他们设计出一条恰好经过M条边的路径。光明小学的小朋友们希望全盘考虑所有的因素,所以你需要把任意两点间经过M条边的最短路径的距离输出出来以供参考。你需要设计这样一...转载 2018-08-14 20:16:46 · 2953 阅读 · 1 评论 -
今日头条2018秋招笔试题(未完待续)
第一题:#include <iostream>#include <vector>#include <string>using namespace std;void helper(const vector<vector<int>>& array, vector<vector<bool>&原创 2018-08-12 12:11:31 · 4724 阅读 · 0 评论 -
商汤科技笔试算法题(手写卷积)
#include&amp;lt;iostream&amp;gt;#include&amp;lt;algorithm&amp;gt;#include&amp;lt;vector&amp;gt;using namespace std;int main() { int M, N; int tmparr; cin &amp;gt;&amp;gt原创 2018-10-15 21:11:23 · 3069 阅读 · 0 评论