编程
lnplnp_
这个作者很懒,什么都没留下…
展开
-
A*寻路算法C++简单实现——修复bug版
参考文章: https://blog.csdn.net/u012234115/article/details/47152137 https://www.cnblogs.com/zhoug2020/p/3468167.html 代码主要参考第一篇,修复该篇博客算法里的小bug 该篇博客主要存在两个bug(可以尝试把地图改成20*20,程序可能直接崩): 1、Astar.cpp在判断周围8个...原创 2018-07-18 20:53:06 · 1112 阅读 · 2 评论 -
【C++实现】并查集 6个版本 从入门到优化
#ifndef __UF__H__ #define __UF__H__ #include<cassert> //只记录id值,和哪个节点联通,效率最低 class UF1 { private: int *id; int count; public: UF1(int n){ count = n; id = new int[n]; for (size_t i = 0;...原创 2018-09-05 16:45:08 · 190 阅读 · 0 评论 -
【C++实现】第k大元素 时间复杂度为O(n),空间复杂度为O(1)
题目来源:Lintcode 解题思路: 二基准快速排序,在排序时判断每次找到的标记点下标 p 与 n-k 的大小,若小于n-k,则只需在p的右侧继续递归,若大于 p 则只需在p 的左侧递归,直至 p 与 n-k 相等 vs可运行代码 #include<ctime> #include<vector> #include<iostream> #include...原创 2018-08-21 22:25:52 · 1209 阅读 · 0 评论 -
【C++实现】归并排序 二分法查找
范围查询(Range) 描述 数轴上有n个点,对于任一闭区间 [a, b],试计算落在其内的点数。 输入 第一行包括两个整数:点的总数n,查询的次数m。 第二行包含n个数,为各个点的坐标。 以下m行,各包含两个整数:查询区间的左、右边界a和b。 输出 对每次查询,输出落在闭区间[a, b]内点的个数。 样例 输入 5 3 1 3 7 9 11 4 6...原创 2018-08-17 09:06:44 · 361 阅读 · 0 评论 -
【C++实现】LightHouse
灯塔(LightHouse) 描述 海上有许多灯塔,为过路船只照明。 (图一) 如图一所示,每个灯塔都配有一盏探照灯,照亮其东北、西南两个对顶的直角区域。探照灯的功率之大,足以覆盖任何距离。灯塔本身是如此之小,可以假定它们不会彼此遮挡。 (图二) 若灯塔A、B均在对方的照亮范围内,则称它们能够照亮彼此。比如在图二的实例中,蓝、红灯塔可照亮彼此,蓝、绿灯塔则不...原创 2018-08-19 20:07:26 · 572 阅读 · 0 评论 -
【C++实现】LFU缓存
#include<iostream> #include<unordered_map> #include<algorithm> using namespace std; //调试用 //void printList(int obj) //{ // cout << obj << "\t"; //} //void printFun(u...原创 2018-08-13 22:30:23 · 1324 阅读 · 0 评论 -
【C++实现】动态规划求解 LCS 最长公共子串问题
传统递归,时间复杂度O(2^n) 本demo时间复杂度O(n*m) 空间复杂度O(n*m) #include<iostream> #include<vector> using namespace std; #define max2(a,b) ((a)>(b)?(a):(b)) vector<vector<int>> dp; vector...原创 2018-08-16 00:12:21 · 533 阅读 · 0 评论 -
【C++实现】五大常用算法之二(上):BFS算法(实例:接金币)
小赛非常喜欢玩游戏,最近喜欢上了一个接金币的游戏。在游戏中,使用帽子左右移动接金币,金币接的越多越好,但是金币掉到地上就不能再接了。为了方便问题的描述,我们把电脑屏幕分成11格,帽子每次能左右移动一格。现在给电脑屏幕如图标上坐标: 也就是说在游戏里,金币都掉落在0-10这11个位置。开始时帽子刚开始在5这个位置,因此在第一秒,帽子只能接到4,5,6这三个位置中其中一个位置上的金币。问小赛在游戏...原创 2018-07-21 17:12:53 · 1353 阅读 · 0 评论 -
【C++实现】五大常用算法之一:分治算法(实例:汉诺塔)
求解思想:大而化小 1、问题拆分成子问题 2、对子问题求解 在汉诺塔游戏中,有三个分别命名为A、B、C得塔座,几个大小各不相同,从小到大一次编号得圆盘,每个原盘中间有一个小孔。最初,所有得圆盘都在A塔座上,其中最大得圆盘在最下面,然后是第二大,以此类推. 先上代码 #include<iostream> using namespace std; class Move { ...原创 2018-07-20 20:40:59 · 3062 阅读 · 0 评论 -
【C++实现】基本排序算法 插入排序——归并排序——快速排序——堆排序
/* 排序总结:(基于100w随机数,有序数、重复数测试) 1、插入排序适合近乎有序的序列 2、归并排序优化:(优化前 120S) 1)数据小于15时采用插入排序 10S 2)避免频繁动态申请内存 memcpy(dest,src,sizeof(int)*len) 用static 变量 0.2S 缺点:需要O(N)的空间复杂度 3、快速排序优化:(优化前 如果序列完全有序,则...原创 2018-09-05 16:48:56 · 393 阅读 · 0 评论