算法
文章平均质量分 65
水木清华Winer
我热爱计算机。
展开
-
2017腾讯校招暑期实习生笔试题2
字符移位小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。 你能帮帮小Q吗?输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.输出描述:对于每组数据,输出移位后的字符串。输入例子:AkleBiCeilD输出例子:kleieilABCD解题思路 如果碰到大写字母,就把这个大写字母放...原创 2018-03-22 19:54:47 · 583 阅读 · 0 评论 -
2017腾讯校招暑期实习生笔试题1
构造回文给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述:对于每组数据,输出一个整数,代表最少需要删除的字符个数。示例1输入abcdagoogle输出22解题思路: 找到两个字符...原创 2018-03-23 11:56:04 · 3841 阅读 · 0 评论 -
Bellman-Ford算法的队列优化
Dijkstra算法求最短路径的图时不能有负权边,因为扩展到负权边的时候会产生更短的路径,有可就已经破坏了已经更新的点路程不会改变的性质。Dijkstra算法虽然好,具有良好的扩展性,扩展后可以适应很多问题,高效的A*算法就是有Dijkstra算法扩展来的,但Dijkstra算法无法解决负权边,这是最大的弊端。Bellman-Ford算法正好弥补Dijkstra算法的这个弊端,可以堪称完美最短路径...原创 2018-04-07 15:38:04 · 352 阅读 · 0 评论 -
数组实现邻接表
#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 · 344 阅读 · 0 评论 -
Dijkstra算法
Dijkstra算法:基本思想是每次找到离源点最近的一个顶点,然后以该顶点为中心进行扩展,通过边来松弛源点到其余各个顶点的路程,最终得到源点到其余所有点的最短路径。代码:#include <iostream>#include <vector>using namespace std;const int MAX = 99999;int main(){ int ...原创 2018-04-07 17:40:44 · 229 阅读 · 0 评论 -
堆排序
#include <iostream>#include <vector>#include <algorithm>using namespace std;/* 1).从小到大排序,建立最小堆 * 然后每次删除顶部元素并将顶部元素输出或存储起来 * 直到堆空为止 * 2).从小到大排序,建立最大堆 * 最大对建好后,最大元素在vec[1],vec...原创 2018-04-01 11:08:42 · 146 阅读 · 0 评论 -
快速排序
快速排序:(小->大),首先在序列中找出一个数作为基准数,一般第一次会选择序列的首元素,再选择左右两个探针,一般第一次会选择序列的首尾下标作为左右探针,从两端开始探测,起始探测方向随意,但一定得是基准数的对面。为什么呢?(比如,序列(6,1,2,7,9)基准数选则首下标,则探测方向应从右侧开始,这样才能保证左右探针在相遇的时候,右边的都是大于基准数的,因为如果从左测开始探测的话,碍于(左探针...原创 2018-04-06 17:30:19 · 152 阅读 · 0 评论