八大常见的算法:   枚举算法   递推算法   递归算法   分治算法   贪心算法   试探算法   迭代算法   模拟算法 在后续文章中会一一讲述,并列举一些实例。  
这是悦乐书的第151次更新,第153篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第10题(顺位题号是28)。给定两个任意字符串haystack、needle,返回haystack中第一次出现needle的索引,如果needle不是haystack的一部分,则返回-1。
问题 给定一群树的坐标点,画个围栏把所有树围起来(凸包)。 至少有一棵树,输入和输出没有顺序。 Input: [[1,1],[2,2],[2,0],[2,4],[3,3],[4,2]] Output: [[1,1],[2,0],[4,2],[3,3],[2,4]] 思路和代码 1. 暴力法(超
【洛谷P3960】列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子。 前段时间,Sylvia 参加了学校的军训。众所周知,军训的时候需要站方阵。 Sylvia 所在的方阵中有 n×m 名学生,方阵的行数为 n ,列数为 m 。 为了便于管理,教官在训练开始时,按照从前到后,从左到右的
一、递推算法思想   利用已知条件,逐步递推,直到得到结果为止。两种递推算法:顺推法、逆推法。 二、实例演练   (1)兔子繁殖问题。    代码实现: #include "stdio.h" #define NUM 13 int main() { int i; long fib[N
题目地址:https://vjudge.net/problem/POJ-2096 说的是有n个bug,和s个系统。现在一个人一天能发现一个bug,它可能是任何一个系统中的,也可能会发现已经发现过的bug。 问,他发现全部n个bug,并且s个系统中都出现bug的天数的期望。 代码是借用kuangbin
1. 问题 给定一个单链表,随机返回一个结点,要求每个结点被选中的概率相等。 2. 思路 在一个给定长度的数组中等概率抽取一个数,可以简单用随机函数random.randint(0, n-1)得到索引来抽取。 本题是给定了链表,当然也好做,可以事先遍历一次求长度,每次要取的时候随机求索引,然后遍历一
一、分治算法的思想   将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同,只要解决子问题,就可得到原问题的解。 二、分治算法的解题过程   (1)分解,将要解决的问题划分成若干个规模较小的同类问题。   (2)求解,当子问题划分到足够小时,用简单的方法解决。   
一、贪心算法的思想   贪心算法也称贪婪算法,此算法思想不从整体最优上考虑问题,仅是在某种意义上的局部最优求解。由此可见贪心算法只是追求某范围内的最优,可以将其称之为“温柔的贪婪”。   贪心算法存在的问题:   (1)不能保证最后的解是最优的;(2)不能用来求最大或最小解的问题;(3)只能求满足某
A是水题,此处略去题解 B - PreSuffix ZOJ - 3995 (fail树+LCA) 给定多个字符串,每次询问查询两个字符串的一个后缀,该后缀必须是所有字符串中某个字符串的前缀,问该后缀最长时,是多少个字符串的前缀。 思路:对所有串构造ac自动机,根据fai
原题地址:https://vjudge.net/problem/ZOJ-3329 题目大意:   有三个骰子,分别有k1,k2,k3个面,初始分数是0。第i骰子上的分数从1道ki。当掷三个骰子的点数分别为a,b,c的时候,分数清零,否则分数加上三个骰子的点数和,当分数>n的时候结束。求需要掷骰
1. 问题 对于一个可能包含重复数字的数组,给定一个目标数,随机返回该目标数的下标。 2. 思路 很直接的做法是,构建一个字典,键为目标数,值为一个数组,存储的是目标数在原数组中出现过的位置下标。 每次输入一个目标数,直接根据目标数得到下标数组,然后在这个下标数组中随机取一个下标即可。 init:
这是悦乐书的第152次更新,第154篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第11题(顺位题号是35)。给定排序数组和目标值,如果找到目标,则返回索引。 如果没有,请返回索引按顺序插入的索引。假设数组中没有重复项。例如: 输入:[1,3,5,6],5 输出:2
目录 B树定义及特性 查找顺序 保持平衡 B+树B+树的插入 使用场景 参考 今天学习B树和B+树,B树和B+树都是基于二叉树的衍生,对于二叉树不太了解的读者可以翻看《数据结构:二叉树》 本文目录: B树 定义及特性 B树,在写法上通常是B-树,这不是减号的意思,只是一种表达方式,它是一种能够存
一·迭代算法的思想   迭代算法在使用过程需要做好如下3方面的工作:(1)确定迭代变量(2)建立迭代关系(3)对迭代过程的控制 二·实例演练   `求平方根`问题   代码实现: #include "stdio.h" #include "math.h" int main() { doubl
一·模拟算法的思想   解决模拟问题,需要仔细分析题目给出的规则,要尽可能地做到全面考虑所有可能出现的情况,这是解决模拟问题的关键点之一。 二·实例演练   `猜数字游戏`问题   代码实现: #include"stdio.h" #include "time.h" int main() {
取反符号(~) 作用:将数字转换成二进制数,然后按位取反。 如:   十进制数 5 转换成二进制是0101(此时显示出来的是原码)   取反结果是 1010(此时显示出来的是补码)   将补码转换成原码(先减1,非符号位取反)1110   1110转换成十进制数-6   #include<io
学习的一些记录,便于查漏补缺 定义   在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。   节点类,示例代码(java) public class Nod
【洛谷P2584】【ZJOI2006】GameZ游戏排名系统题解 题目链接 题意: GameZ为他们最新推出的游戏开通了一个网站。世界各地的玩家都可以将自己的游戏得分上传到网站上。这样就可以看到自己在世界上的排名。得分越高,排名就越靠前。当两个玩家的名次相同时,先上传记录者优先。由于新游戏的火爆,网