随笔分类 -  算法

摘要:贪心+优先级队列 Expedition(加油站问题) Fence Repair(木板切割) Expedition(加油站问题) 你需要驾驶一辆卡车形势L单位距离。最开始时,卡车上有P单位的汽油。卡车每开1单位距离需要消耗1单位的汽油。如果在途中车上的汽油耗尽,卡车就无法继续前行,因而无法到达终点。在 阅读全文
posted @ 2020-10-19 08:29 袁君(Louis) 阅读(325) 评论(0) 推荐(0)
摘要:迷宫的最短路径 给定一个大小为N*M的迷宫。迷宫由通道和墙壁组成,每一步可以向领接的上下左右四格的通道移动。请求出起点到终点所需的最小步数。 请注意,本题假定从起点一定可以移动到终点。 限制条件 N,M ≤ 100 思路: 借助辅助数组来标记当前位置是否走过,首先将辅助数组全部初始化为INF 定义一 阅读全文
posted @ 2020-10-16 20:09 袁君(Louis) 阅读(147) 评论(0) 推荐(0)
摘要:Lake Counting(POJ No.2386) 有一个大小为N*M的园子,雨后积起了水。八连通的积水被认为是在一起的。请求出园子里共有多少个水洼?(八连通是指下图中相对w的*部分) * * * *w* * * * 限制条件 N,M ≤ 100 思路: 先遍历整个园子,从任意的w开始,把周围所有 阅读全文
posted @ 2020-10-16 19:51 袁君(Louis) 阅读(161) 评论(0) 推荐(0)
摘要:树的题目 判断是否为满二叉树 判断是否为平衡二叉树 判断是否为搜索二叉树 判断是否为完全二叉树 找最低公共祖先结点 树的结点 class Node { public: Node(int v) :value(v){} int value; Node *left; Node *right; }; 判断是 阅读全文
posted @ 2020-10-16 14:51 袁君(Louis) 阅读(132) 评论(0) 推荐(0)
摘要:题目 象棋中马的跳法 机器人达到指定位置方法数 换钱的最少货币数 Bob的生存概率 纸牌问题 象棋中马的跳法 【题目】 请同学们自行搜索或者想象一个象棋的棋盘,然后把整个棋盘放入第一象限,棋盘的最左下 角是(0,0)位置。 那么整个棋盘就是横坐标上9条线、纵坐标上10条线的一个区域。 给你三个 参数 阅读全文
posted @ 2020-10-02 16:59 袁君(Louis) 阅读(175) 评论(0) 推荐(0)
摘要:Morris遍历 一种遍历二叉树的方式,并且时间复杂度O(N),额外空间复杂度O(1) 通过利用原树中大量空闲指针的方式,达到节省空间的目的 Morris遍历可以改前中后序的树遍历 思路: 创建一个当前节点cur 等于 head节点,再创建一个mostRight节点 表示最右节点 mostRight 阅读全文
posted @ 2020-10-02 13:31 袁君(Louis) 阅读(286) 评论(0) 推荐(0)
摘要:KMP算法 KMP KMP算法解决的问题 字符串str1和str2,str1是否包含str2,如果包含返回str2在str1中开始的位置。 如何做到时间复杂度O(N)完成? 思路: 首先判断两个字符串是否为空串,并且str2的长度是否小于str1的长度,因为题目要求str1中包含str2。 以上都满 阅读全文
posted @ 2020-09-02 09:16 袁君(Louis) 阅读(141) 评论(0) 推荐(0)
摘要:哈希函数和哈希表 RandomPool RandomPool 设计RandomPool结构【题目】 设计一种结构,在该结构中有如下三个功能: insert(key):将某个key加入到该结构,做到不重复加入 delete(key):将原本在结构中的某个key移除 getRandom(): 等概率随机 阅读全文
posted @ 2020-09-02 08:22 袁君(Louis) 阅读(240) 评论(0) 推荐(0)
摘要:贪心算法 分金条问题 会议室场次问题 花费资金做项目问题 取中位数问题 字典序最小问题 暴力递归 汉诺塔问题 打印字符串的全部子序列 打印字符串全排列(有重复) 打印字符串全排列(无重复) 数字转字符串 背包问题 纸牌问题 N皇后问题 分金条问题 一块金条切成两半,是需要花费和长度数值一样的铜板的。 阅读全文
posted @ 2020-08-23 16:44 袁君(Louis) 阅读(601) 评论(0) 推荐(0)
摘要:树的遍历 ·递归先中后序遍历 ·先序非递归遍历 ·中序非递归遍历 ·后序非递归遍历 ·宽度优先遍历 树的题目 ·求一颗二叉树的宽度 树的结构体 class Node { public: Node(int data) { value = data; left = NULL; right = NULL; 阅读全文
posted @ 2020-08-08 22:32 袁君(Louis) 阅读(345) 评论(0) 推荐(0)
摘要:计数排序 基数排序 单链表 计数排序(时间复杂度,O(N) ) 1 void countSort(int array[],int range ,int len) 2 { 3 //range是取值范围,假设0到10内,是11个下标,所以range+1 4 vector<int>arr(range+1, 阅读全文
posted @ 2020-08-02 21:23 袁君(Louis) 阅读(154) 评论(0) 推荐(0)
摘要:学习目录: 选择排序 冒泡排序 插入排序 归并排序 二分法 异或运算 详细解析后期会补上,目前先更新代码块 选择排序( 时间复杂度,O(N2) ) 1 void selectSort(int array[], int len) 2 { 3 if (array == NULL || len < 2) 阅读全文
posted @ 2020-07-26 23:36 袁君(Louis) 阅读(510) 评论(0) 推荐(0)
摘要:记录学习过程。 阅读全文
posted @ 2020-07-26 23:23 袁君(Louis) 阅读(111) 评论(0) 推荐(0)