随笔分类 - 【102】数据结构和算法[精选]
摘要:题目描述 输入一棵二叉查找树,将该二叉查找树转换成一个排序的循环双向链表。 要求不能创建任何新的结点,只调整指针的指向,也不能开辟新的存储空间O(1) 题目分析 首先照旧我们问题的解决思路,首先简化问题。(前提你应该了解二叉查找树和双向链表) 如果没有任何的要求,那么我们自然会想到遍历整棵树然后排序
阅读全文
摘要:什么是二叉查找树 wiki:https://en.wikipedia.org/wiki/Binary_search_tree 首先是名称:二叉查找树英文叫Binary search tree,这个在很多算法题目中很常见所以要记住,特别是英文题目中。也叫做二叉排序树,二叉搜索树等等。 具体的定义比较官
阅读全文
摘要:什么是中缀表达式,什么是后缀表达式 我们一般看见的多项式计算都是中缀表达式构成的:1+2*3+4/3 类似这种,为什么说是中缀呢?因为它的计算符号都是在两个数中间的。 那么自然而然的明白了后缀表达式是一种计算符号在两个数后面的。 如123*+43/+ 中缀表达式和后缀表达式有什么关系? 其实仔细你就
阅读全文
摘要:题目描述 给出一个数组,向右寻找每一个元素的下一个较大的元素,没有更大的则为-1 举例 {4,6,1,3,2,5} 则求得的答案应为 {6,-1,3,5,5,-1} 题目分析 首先对于这样的题目,我们总是先想到最简单的,那么就是枚举,每次循环一个元素,不停的向右找就可以了。时间复杂度应该是n^2 但
阅读全文
摘要:原题描述 Given n non-negative integers representing the histogram’s bar height where the width of each bar is 1, find the area of largest rectangle in the
阅读全文
摘要:获取栈的最小值 定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。 思考过程 对于push和pop操作来说,都很简单,无论是数组实现栈,还是链表实现栈都很容易。但是唯独min函数不好做。 首先对于栈这个数据结构来说,我们只能获
阅读全文
摘要:首先,对于链表来说,我们不能像数组一样直接访问,所以我们想到要求倒数第K个节点首先要知道最后一个节点。 然后从最后一个节点往前数K个。 最后得到想要的值。 但是这是不对的,为什么呢?因为题目给出的是单向链表,只能从前往后找。 所以我们需要换一种思路。 定两个指针。 都从链表的头开始走,一个先走一个后
阅读全文
摘要:归并排序的属性 时间复杂度 O(n log n)空间复杂度 O(n)稳定性 稳定发明者 约翰·冯·诺伊曼 (就是那个计算机冯·诺伊曼体系的人) 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 归并排序是建立在归并操作上
阅读全文
摘要:链表反转有两种常见方式。下面从图中详细解释。其中带有部分核心代码,最后上完整代码。 迭代法 //首先定义三个变量 PNODE pre = NULL; PNODE now = pHead->pNext; PNODE next = NULL; next = now->pNext;//先保存下一个节点 n
阅读全文
摘要:新开的这个分类是建立在算法这个分类的基础之上的。 算法这个分类主要是一些题解,一些算法的简单了解和记忆。 但是始终缺乏一件东西,那就是系统和分类。 我渐渐开始意识到,其实算法和数据结构不能像之前那样零散的记忆了。 也需要适当的整理和总结。 于是新开了这个分类,目的也就是总结那些之前用过的算法。 还有
阅读全文