
数据结构与算法
文章平均质量分 58
weixin_39030846
一步一个脚印。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
字符串
字符串一、字符串的可变性(String variability)二、字符串的比较(String comparison)一、字符串的可变性(String variability)Java: String str = "abcd";C++: string x("abcd");String immutable :link.结论:java中的字符串是不可变的,当改变字符串的值的时候会重新创建一个String对象,而C++是可变的。二、字符串的比较(String comparison)原创 2021-02-10 18:06:36 · 1569 阅读 · 0 评论 -
递归、分治、动态规划
递归、分治、动态规划一、递归(Recursion)二、分治(Divide & Conquer)三、动态规划(Dynamic Programming)四、总结:一、递归(Recursion)public void recur(int level, int param) { // terminator if (level > MAX_LEVEL) { // process result return; } // process curren原创 2021-02-10 13:07:02 · 145 阅读 · 0 评论 -
二分查找
二分查找一、二分查找(Binary Search)1.1 二分查找的前提三级目录一、二分查找(Binary Search)1.1 二分查找的前提目标函数单调性(单调递增或者递减)存在上下界(bounded)能够通过索引访问(index accessible)left, right = 0, len(array) - 1while left <= right: mid = (left + right) / 2 if array[mid] == target: # find原创 2021-02-09 15:59:52 · 122 阅读 · 0 评论 -
贪心算法
贪心算法一、贪心算法(Greedy)1.1 概念:1.2 贪心算法正例(能得到最优):1.3 贪心算法反例(不能得到最优):二、结论:一、贪心算法(Greedy)1.1 概念:贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法与动态规划的不同在于它对每个子问题的解决方案都做出选择,不能回退。动态规划则会保存以前的运算结果,并根据以前的结果对当前进行选择,有回退功能。贪心算法是一种在每一步选择中都采取在当前状态下最好或最优(即原创 2021-02-09 10:44:29 · 606 阅读 · 1 评论 -
深度优先搜索和广度优先搜索
深度优先搜索和广度优先搜索一、遍历搜索二、深度优先搜索(Depth-First-Search)三、广度优先搜索(Breadth-First-Search)一、遍历搜索在树(图/状态集)中寻找特定结点每个节点都要访问一次每个节点仅仅要访问一次对于节点的访问顺序不限深度优先:Depth First Search(DFS)广度优先:Breadth First Search(BFS)public class TreeNode { public int val; public Tree原创 2021-02-07 14:09:54 · 275 阅读 · 0 评论 -
分治、回溯
分治、回溯一、分治(Divide & Conquer)二、回溯(BackTracking)三、总结一、分治(Divide & Conquer)概念:简单理解的话是把一个复杂的问题分解为若干个子问题解决,最后把结果再汇总。def divide_conquer(problem, param1, param2, ...):# recursion terminatorif problem is None: print_result return# prepare data dat原创 2021-02-06 11:54:47 · 174 阅读 · 0 评论 -
泛型递归、树的递归
泛型递归、树的递归一、递归(Recursion)二、递归代码模板(Recursive Code Template)三、递归总结(Recursive Summary)一、递归(Recursion)从前有个山山里有个庙庙里有个和尚讲故事返回1计算 n!n!= 1 * 2 * 3 * … * npublic int Factorial(n): if n <= 1: return 1 return n * Factorial(n — 1)二、递归代码模板(Recursive原创 2021-02-05 11:08:58 · 231 阅读 · 0 评论 -
树、二叉树、二叉搜索树、图
树、二叉树、二叉搜索树、图一、树(Tree)二、二叉树(Binary Tree)三、二叉搜索树(Binary Search Tree)四、二叉树遍历五、二叉搜索树常见操作六、复杂度分析一、树(Tree)树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分原创 2021-02-04 14:40:16 · 175 阅读 · 0 评论 -
哈希表、映射、集合
哈希表、映射、集合一、哈希表(HashTable)二、哈希碰撞(Hash Collisions)三、工程实现四、源码链接五、复杂度分析一、哈希表(HashTable)哈希表(Hash table),也叫散列表,是根据关键码值(Keyvalue)而直接进行访问的数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫作散列函数(Hash Function),存放记录的数组叫作哈希表(或散列表)。二、哈希碰撞(Hash Collisions)哈希碰撞指通过哈希原创 2021-02-03 18:09:14 · 254 阅读 · 0 评论 -
栈、队列、双端队列、优先队列
栈、队列、双端队列、优先队列一、栈(Stack)2.1 特点:先进后出,或者说是后进先出。2.2 时间复杂度:插入和删除的时间复杂度为O(1)。2.3 看看stack的源码:打开浏览器输入stack source java或者访问下面的链接:stack source: link.二、队列(Queue)3.1 特点特点:先进先出、后进后出。3.2 时间复杂度:插入和删除的时间复杂度为O(1)。1.3 看看stack的源码:打开浏览器输入queue source java或者访原创 2021-02-02 17:51:21 · 234 阅读 · 0 评论 -
数组、链表、跳表的时间复杂度和空间复杂度
数组、链表、跳表的时间复杂度和空间复杂度分析一、数组二、链表三、跳表一、数组1.1头插入、尾插入、中间某个位置插入1.2 头删除、尾删除、中间某个位置删除1.3查找二、链表2.1头插入、尾插入、中间某个位置插入2.2 头删除、尾删除、中间某个位置删除2.3查找三、跳表3.1空间复杂度3.2时间复杂度...原创 2021-01-10 22:12:50 · 7140 阅读 · 2 评论 -
时间复杂度和空间复杂度
时间复杂度和空间复杂度一、概念二、java代码案例三、分析其中一个代码段的时间和空间复杂度三、分析其中一个代码段的时间和空间复杂度,这里分析的是代码段2.6,这里分析的是代码段2.6一、概念1.1 时间复杂度:算法执行结束的运行时间.1.2 空间复杂度:算法执行所需要占用的最大空间。二、java代码案例2.1 时间复杂度为O(1) 空间复杂度为O(1)的代码: /** * 时间复杂度为O(1) 空间复杂度为O(1) */ private static void te原创 2021-01-09 20:59:26 · 217 阅读 · 0 评论 -
数据结构与算法脑图
数据结构与算法脑图从今天开始我要重新学习数据结构与算法,下面是我画的思维脑图,可能画的不完善,之后边学习的话会边完善,之所以写博客是想记录我的学习过程,如果画的不好可以留言。...原创 2021-01-09 13:52:18 · 179 阅读 · 0 评论