![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
LearnLHC
这个作者很懒,什么都没留下…
展开
-
数据结构与算法 - 07 二分搜索与贪婪
二分搜索 Binary Search 定义 又叫 折半搜索 在有序数组中查找某一特定元素的搜索算法 前提:数组必须有序 优点 时间复杂度:O(lgn),非常高效 又叫 对数搜索 缺点 要求待查找的数组或区间是排好序的 应用 数据是排好序的,且不会经常变动 代码 递归 非递归 贪婪 Greedy 定义 每一步都采用在当前状态下最好或最优的选择,从而希望导致结果是最好或最优的算法 优点 从局部考原创 2020-06-30 15:38:00 · 256 阅读 · 0 评论 -
数据结构与算法 - 06 动态规划
判断动态规划 - 同时满足以下条件 1.是数学优化对方法 - 最优子结构 一个问题的最优解,是由它对各个子问题的最优解决定的 状态转移方程 f(n) 2. 是编程的方法 - 重叠子问题 保证每个重叠的子问题,只会被求解一次 解题思路 1. 找最优子结构:输入规模对半分 2. 找最优子结构:每次减一个 3. 找重叠子问题 解决动态规划问题对两个难点 1. 如何定义 f(n) 2. 如何通过 f(1),f(2),... f(n-1) 推导出 f(n),原创 2020-06-30 15:34:17 · 184 阅读 · 0 评论 -
数据结构与算法 - 05深度与广度优先搜索【非递归解法 与 打通墙问题】
深度优先搜索(Depth-First Search / DFS) 定义 从起点出发,选择一个方向不断地向前,直到无法继续,然后换一个方向,直到最后 应用 解决对上连通性问题。判断是否有一条路径从起点连接到终点 解题思路 使用 栈(Stack),后进先出 LIFO 练习 广度优先搜索(Breadth-First Search / BFS) 定义 从起点原创 2020-06-16 16:53:07 · 254 阅读 · 0 评论 -
数据结构与算法 - 04递归与回溯
递归与回溯关系 递归,基本性质就是函数调用,在处理问题的时候,递归往往是把一个大规模的问题不断地变小,然后进行推导的过程 回溯,则是利用递归的性质,从问题的起始点出发,不断地进行尝试,回头一步甚至多步再做选择,直到最终抵达终点的过程 递归 Recursion 算法思想 是一种调用自身函数的算法(二叉树的许多性质在定义上就满足递归) 练习 LC91、LC247 时间复杂度计算方式 迭代法 公式法原创 2020-06-16 16:50:54 · 228 阅读 · 0 评论 -
数据结构与算法 - 03排序 (冒泡、插入、归并、快速、拓扑)
1. 冒泡排序 Bubble Sort 基本思想 给定一个数组,这些元素将通过相互之间的比较,按照大小顺序一个个地像气泡一样浮出水面 实现 每一轮,从头部开始,每两个元素比较大小进行交换,直到这一轮中最大或最小元素被放置到尾部,不断重复,直到所有元素都排好位置 代码示例 时间复杂度 O(n2) 稳定的排序算法 指如果数组里两个相等的数,那么排原创 2020-06-09 16:35:19 · 245 阅读 · 0 评论 -
数据结构与算法 - 02高级数据结构
1. 优先队列 Priority Queue 特点 保证每次取出的元素都是队列中优先级别最高的 优先级别可以自定义。如:数值越大/小,优先级越高 适用于 从一堆杂乱无章的数据当中按照一定的顺序,逐步筛选出部分乃至全部数据 前 K 问题 练习 任意一个数组,找出前 K 大的数 实现 本质:是一个二叉堆结构(数组) 二叉堆:利用一个数组结构来实现完全原创 2020-05-27 14:38:23 · 417 阅读 · 0 评论 -
数据结构与算法 - 01基础数据结构
1. 数组 Array 优点 构建非常简单 能再 O(1) 的时间里根据数据的下标 (index) 查询某个元素 缺点 构建时必须分配一段连续的空间 查询某个元素是否存在时,需遍历整个数组 O(1) 删除和添加时,耗时 O(1) 应用场景 元素大小确定,删除插入不多 根据下标查询数据 练习 LC242:两个字符串 s 和 t,判断 t 是否原创 2020-05-25 10:12:38 · 187 阅读 · 0 评论 -
算法题的五种解法 - 程序员面试金典
要解决棘手的算法问题,世上没什么不二法门,不过下面介绍的几种方法可能管用。常言道熟能生巧,题目练习得越多,就越容易确定该采用哪种方法来解决问题。、 另外,下面这五种方法可以“混搭”使用。也就是说,施以“简化推广法”后,还可以接着尝试“模式匹配法”。方法一:举例法我们先从你可能熟悉的“举例法”开始,也许你从未听过这种方法。“举...原创 2019-03-04 11:02:14 · 671 阅读 · 0 评论 -
二叉树的用途-(未完)
二叉树二叉树是一种重要的数据结构,与数组、向量、链表都是一种顺序容器,它们提供了按位置访问数据的手段。但是有一个缺点,它们都是按照位置来确定数据,想要通过值来获取数据,只能通过遍历的方式。而二叉树在很大程度上解决了这个缺点,二叉树是按值来保存元素,也按值来访问元素。二叉树由一个个节点组成,一个节点最多只能有两个子节点,从根节点开始左右扩散,分左子节点和右子节点,向下一直分支。许多实际问...原创 2019-03-01 15:12:00 · 13072 阅读 · 0 评论 -
【编程练习题】从一百亿条地址数据中获取数量最多的Top10【热搜】-- MapReduce
场景哈希分治法这是一个 ip 地址 127.0.0.1假设有100亿个这样的 ip 地址存在文件中这个文件大小大约是 100GB问题:要统计出100亿个 ip 中,重复出现次数最多的前10个分析100GB 几乎不可能一次加载进内存进行操作,所以必须要拆分那么可以利用分治的思想,把规模大的问题化小,然后解决各个小的问题,最后得出结果。实现思路ipv4 地址是一个...原创 2019-03-01 14:55:35 · 2904 阅读 · 0 评论 -
数据结构与算法 - 串 - 从主串中查找子串 - KMP模式匹配
1、定义串是由零个或多个字符组成的有限序列,又名字符串2、抽象数据类型Data 串中元素仅由一个字符组成,相邻元素具有前驱和后继关系 OperationStrAssign( T, *chars ) 生成一个其值等于字符串常量chars的串T StrCopy( T, S ) 串S存在,由串S复制得串T ClearString( S ) 串S存在,将串清空 StringEm...原创 2019-01-21 19:12:06 · 3001 阅读 · 0 评论 -
链表的插入删除操作中,p != NULL 和 p->next !=NULL的区别
1、首先两个表达式的输出情况while(p!=NULL){ printf("%d",p->data); p=p->next;}第一步:p指向第一个节点,第一个节点数据不为空;打印数据:1;p=p->next,指向第二个节点; 第二步:p指向第二个节点,第二个节点数据不为空;打印数据:2;p=p->next,指向第三个节点; 第三步:p...原创 2019-01-17 22:57:28 · 3746 阅读 · 0 评论 -
C++实现 递归算法 - 赏金问题 - 整数因式分解
使用递归方法实现以下问题 1.赏金问题 假设有四种面额的钱币,1 元、2 元、5 元和 10 元,而您一共给我10元, 那您可以奖赏我1张10元,或10张1元,或5张1元外加1张5元等等。 如果考虑每次奖赏的金额和先后顺序,那么最终一共有多少种不同的奖赏方式? 2.整数因式分解问题 使用递归方法,为给定整数n,找到所有可能的分解(1在解中最多出现1次)...原创 2018-12-19 12:27:17 · 1216 阅读 · 0 评论 -
暴力破解密码 - C++ 递归方法实现
问题描述: 暴力破解密码 假设有一个 4 位字母密码,每位密码是 a~e 之间的小写字母 你能否编写一段代码,来暴力破解该密码?(可重复排序) #include <iostream>#include<string>using std::string;using namespace std;void BreakPassword( s...原创 2018-12-28 12:29:07 · 5709 阅读 · 3 评论 -
C++实现归并排序算法
1.归并排序 实现方法: 把长度为 n 的数列,每次简化为两个长度为 n/2 的数列,直至数列中剩一个元素后两两合并,直至所有都参与操作。 合并方法:比较两个数列第一个元素,将最小的放在另一个数中C中,重复直至某数列为空,然后将另一个数列中元素都放入C数组中2.代码实现:#include <iostream>#include <vector>...原创 2018-12-21 16:19:43 · 1654 阅读 · 0 评论