- 博客(10)
- 收藏
- 关注
原创 Dijkstra算法
Dijkstra算法:基本思想是每次找到离源点最近的一个顶点,然后以该顶点为中心进行扩展,通过边来松弛源点到其余各个顶点的路程,最终得到源点到其余所有点的最短路径。代码:#include <iostream> #include <vector> using namespace std; const int MAX = 99999; int main() { int ...
2018-04-07 17:40:44 234
原创 数组实现邻接表
#include <iostream> #include <vector> using namespace std; int main() { int n, m; //n表示顶点个数,m表示边数 std::cin >> n >> m; std::vector<int>u(m + 1); //起点集合 std::vecto...
2018-04-07 16:19:31 346
原创 Bellman-Ford算法的队列优化
Dijkstra算法求最短路径的图时不能有负权边,因为扩展到负权边的时候会产生更短的路径,有可就已经破坏了已经更新的点路程不会改变的性质。Dijkstra算法虽然好,具有良好的扩展性,扩展后可以适应很多问题,高效的A*算法就是有Dijkstra算法扩展来的,但Dijkstra算法无法解决负权边,这是最大的弊端。Bellman-Ford算法正好弥补Dijkstra算法的这个弊端,可以堪称完美最短路径...
2018-04-07 15:38:04 352
原创 快速排序
快速排序:(小->大),首先在序列中找出一个数作为基准数,一般第一次会选择序列的首元素,再选择左右两个探针,一般第一次会选择序列的首尾下标作为左右探针,从两端开始探测,起始探测方向随意,但一定得是基准数的对面。为什么呢?(比如,序列(6,1,2,7,9)基准数选则首下标,则探测方向应从右侧开始,这样才能保证左右探针在相遇的时候,右边的都是大于基准数的,因为如果从左测开始探测的话,碍于(左探针...
2018-04-06 17:30:19 155
原创 堆排序
#include <iostream> #include <vector> #include <algorithm> using namespace std; /* 1).从小到大排序,建立最小堆 * 然后每次删除顶部元素并将顶部元素输出或存储起来 * 直到堆空为止 * 2).从小到大排序,建立最大堆 * 最大对建好后,最大元素在vec[1],vec...
2018-04-01 11:08:42 150
原创 2017腾讯校招暑期实习生笔试题1
构造回文给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述:对于每组数据,输出一个整数,代表最少需要删除的字符个数。示例1输入abcda google 输出2 2解题思路: 找到两个字符...
2018-03-23 11:56:04 3844
原创 2017腾讯校招暑期实习生笔试题3
题目: 小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?输入描述: 输入包含多组测试数据。有趣的数字小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?输入描述:输入包含多组测试数据。 对于每组测试数据: N - 本组测试数据有n个数 a1,a2…an - 需要计算的数据 保证: 1<=N<=10000...
2018-03-22 21:04:50 742
原创 2017腾讯校招暑期实习生笔试题2
字符移位小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。 你能帮帮小Q吗?输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.输出描述:对于每组数据,输出移位后的字符串。输入例子:AkleBiCeilD输出例子:kleieilABCD解题思路 如果碰到大写字母,就把这个大写字母放...
2018-03-22 19:54:47 583
原创 智力竞赛 编程题解析
#1285 : 智力竞赛 时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi、小Ho还有被小Hi强拉来的小Z,准备组队参加一个智力竞赛。竞赛采用过关制,共计N个关卡。在第i个关卡中,小Hi他们需要获得Ai点分数才能够进入下一关。每一关的分数都是独立计算的,即使在一关当中获得超过需要的分数,也不会对后面的关卡产生影
2017-04-09 23:08:33 506
原创 图的最小生成树
最小生成树:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。目前用Kruskal(克鲁斯卡尔)算法或prim(普里姆)算法求出。先说以下Kruskal算法:要让n个顶点的图连通,那么至少需要n-1条边,如果一个连通无向图不包含回路,那么就是一棵树,图的最小生成树就是让边的总长度之和最短,我们首先肯定从最小的开始选,依次按照边的顺序...
2017-01-14 16:30:40 253
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人