随笔分类 - 数据结构
摘要:大致思路就是从string中得到一个hash码,然后比较hash码。 从Python的string源码中的发现的;线性搜索;时间复杂度O(n)吧大概。 这是Python的部分源码 hash码多次打乱可以理解,但是具体为什么就不知道了。如果有dalao求告知|・ω・`) 下面是我的代码,仅做记录用。
阅读全文
摘要:题目链接:下一个排列 不妨先看一下全排列的生成, 例如 nums = [1,2,3,4] 1.取出最小值1,再将[2,3,4]排列, 暂令nums = [2,3,4] 2.再取出最小值2, 令nums = [3,4] 3.再取出最小值3, 令 nums = [4] 4,将以上取出的值合并,为[1,2
阅读全文
摘要:题目(lintcode): 1.二数之和 2.三数之和 3.最接近的三数之和 4.四数之和 取三数之和为例: (一) 普通算法,多重遍历数组,需要多重for嵌套,但严重超时。 (二) 剪枝,在外层循环中考虑有没有“不可能符合要求”的情况。 例如,在三数之和中,若两个数之和大于0,直接break。但题
阅读全文
摘要:这个想法来自于数组链表,在数组链表中,数组的每一个元素对应一个指针,这个指针是下一个元素的index。用整数表示指针。 这是这个vector的源码: 1 #include <iostream> 2 using std::cout; 3 4 template <typename T> 5 class
阅读全文
摘要:分治思想:递归,使前一半和后一半排好序,再合并。时间复杂度O(nlgn)
阅读全文
摘要:用了双向链表,快排,<<,=,[]重载,还有erase的实现比较好玩
阅读全文
摘要:快速排序使用了分治思想,分解为求 a(p..q-1)<a[q]<a(q+1) 的问题 + 分别递归a(p..q-1),a(q+1).
阅读全文
摘要:最大堆(二叉)排序分几个步骤: 1.maxheap(),维护最大堆的性质,即节点的值大于子节点的值,时间复杂度O(lgn) 2.bulid_max_heap(),从无序数组中构造最大堆,时间复杂度O(n) 3.heap_sort(),对无序数组进行排序,时间复杂度O(nlgn) 代码有注释
阅读全文
摘要:可直接编译运行,其中status()方法效果如图:
阅读全文
摘要:分治策略的思路: 1.将问题分解为一些子问题,其中有的子问题的形式与原问题相同,只是规模更小 2.递归,求解使递归停止的边界条件 3.合并 对于最大子数组问题,
阅读全文
摘要:可直接编译运行,其中方法status为形象的显示出栈的结构: 1 // visual stack , need define "cout 4 using std::cout; 5 6 template 7 struct item 8 { 9 item():value(),last(NULL),next(NULL){} 10 item *las...
阅读全文

浙公网安备 33010602011771号