数据结构和算法题
文章平均质量分 58
常见数据结构,AC算法题
Schuyler_yuan
静听魔筝看花落,
穿着拖鞋抱着黄瓜啃
展开
-
双指针技巧
双指针技巧参考:双指针技巧汇总 - murphy_gb - 博客园原创 2022-02-28 09:08:29 · 62 阅读 · 0 评论 -
海量数据TopN问题
1. 在十万的数字中找出前100?答:快排patition+二分,堆2. 10亿的数字找前10万,空间给1亿?答:(分治法加堆),时间复杂度klogk3. 100亿数字找前10亿,空间1亿?答:这个问题不是算法问题了,应该是在问工程上的实现,基本得靠切分到多台机器并行运算来解决,具体怎么做,看下那个64马找前四的问题。总之,对于海量数据问题,都是用的“map-reduce”的思想来分而治之,分开局部处理,之后再汇总起来计算。参考:海量数据中的TOPK问题小结 - Exca原创 2022-02-27 14:48:05 · 200 阅读 · 0 评论 -
leetcode——旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。给你一个可能存在重复元素值的数组numbers,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组[3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0思路:这个题咋一看,就是求数组里边的最小值,求最小值有很多的解法,最...原创 2022-02-27 12:55:49 · 87 阅读 · 0 评论 -
leetcode076——数组中的第 k 大的数字
题目:给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4提示:1 <= k <= nums.length <= 104-104<= nums[i] <= 104思路:最直观的...原创 2022-02-27 12:35:00 · 584 阅读 · 1 评论 -
排序——快速排序(快慢指针实现)
之前总结过快排的两种解法,可以参考快排的两种常见解法,最近又发现一种更容易理解的方法,在这里做下记录。这是一种使用 “快慢指针比较” 的方法,来实现快速排序算法。实现快速排序算法的关键,先在数组中选择一个数字(可以理解为轴值),把数组中的数字分为两部分,比选择的数字小的数字移到数组的左边,比选择的数字大的数字移到数组的右边。int partition(vector<int>& nums, int start, int end) { int index = (sta原创 2022-02-27 12:03:19 · 1757 阅读 · 0 评论 -
栈的实现
待更新原创 2019-09-19 15:17:23 · 84 阅读 · 0 评论 -
线段树
待更新原创 2019-09-19 15:13:11 · 124 阅读 · 0 评论 -
图的实现方式
待更新原创 2019-09-19 15:12:03 · 196 阅读 · 0 评论 -
哈夫曼树
待更新原创 2019-09-19 15:10:36 · 120 阅读 · 0 评论 -
由广度优先遍历序列生成二叉树,得出中根遍历序列(2020秋-网易互娱第二题原理)
#include<iostream>#include<string>#include<vector>using namespace std;typedef struct Node{ string strName; Node* pNode_L; Node* pNode_R;}LBNode, *LBTree;void DFS(LBNode*...原创 2019-09-14 21:13:53 · 222 阅读 · 0 评论 -
2048游戏实现
#include<iostream>#include<string>#include<vector>using namespace std;int main(){ string strTmp("0 0 2 4"); string strTmp_1("0 2 2 2"); string strTmp_2("0 4 2 2"); string ...原创 2019-09-11 21:17:35 · 170 阅读 · 0 评论 -
排序——归并排序
归并排序,稳定排序算法的一种,总体思想是“先递归分割,后向上合并”。时间复杂度:nlog2n递归:是合并的前提,只有先分,才有后合;合并:对两个有序子数组进行合并。代码如下,#include <iostream>#include<vector>using namespace std;void merge(vector<int>& vArr, int low, int mid, int high) { int i = low;原创 2019-04-09 10:03:34 · 123 阅读 · 0 评论 -
排序——简单排序
简单排序有三种,包括选择排序(Selection Sort)、冒泡排序(Bubble Sort)和插入排序(Insert Sort)。选择排序每次都选择最小的关键码记录,直到完全排序。实质上就是起泡排序。选择排序第 i 趟选择的是数组中第 i 小的记录,并将这个记录放到数组的第 i 个位置。特点:大部分时间都在比较,很少交换。在寻找下一个较小的数时,需要检索整个未排序的序列,但只用一...原创 2019-03-25 21:43:03 · 6145 阅读 · 0 评论 -
排序——快速排序
这里是快排的两种常见解法,还有一种快慢指针的解法,有兴趣的同学可以参考快慢指针实现快排。快速排序用的恰到好处时,它是迄今为止所有内排序算法中最快的一种。快速排序算法(QSA)本身在不断对小数组进行排序,是分治法的副产品,它是不稳定的。QSA应用广泛,典型应用是UNIX系统调用库函数例程中的qsort函数。QSA有时会由于最差时间代价的性能而在某些应用中无法采用。相对于用二叉树进行排序来说,QSA以一种更有效的方式实现了“分治法”的思想。二叉树排序,是将所有的节点放到一个二叉查找树中,然后再按中序方原创 2019-03-25 22:24:54 · 2146 阅读 · 0 评论 -
红黑树实现
待更新原创 2019-03-29 22:25:45 · 458 阅读 · 0 评论 -
leetcode——斐波那契数列的递归和非递归实现
Fibonacci数列斐波那契数列又称黄金分割数列。因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0,1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)。设f(n)...原创 2019-04-04 11:09:03 · 1926 阅读 · 0 评论 -
二叉树、平衡二叉树
待更新原创 2019-04-04 11:32:05 · 93 阅读 · 0 评论 -
B-tree、B+tree
待更新原创 2019-04-04 11:32:43 · 84 阅读 · 0 评论 -
反转链表(reverse list)
题目:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。链表节点定义如下,typedef struct SList { int data; SList* next;} SList;suisui念链表是面试中经常涉及到的考点,因为链表的结构相比于Hashmap、Hashtable、Concurrenthashmap或者图等数据结构简单许多,对于后者更多面试的侧重点在于其底层实现。比如Hashmap中Entry<k,v>等操作、如何扩容.原创 2019-04-08 21:53:49 · 999 阅读 · 0 评论 -
链表快排(C++实现)
待更新原创 2019-04-08 21:53:40 · 978 阅读 · 0 评论 -
字符串逆置(Python、C++实现)
待更新原创 2019-04-08 21:53:31 · 781 阅读 · 1 评论 -
拓扑排序
待更新原创 2019-04-08 21:52:46 · 99 阅读 · 0 评论 -
HashMap实现
待更新原创 2019-04-05 11:04:12 · 139 阅读 · 0 评论 -
Hash散列原理
待更新原创 2019-04-05 11:05:08 · 163 阅读 · 0 评论 -
字典树
待更新原创 2019-04-08 21:53:04 · 81 阅读 · 0 评论 -
海量数据查一条新数据是否存在
1. bloomfilter2.art树 + bitmap + hdfsHave Fun原创 2019-04-09 10:09:41 · 142 阅读 · 0 评论 -
大顶堆、小顶堆及其建堆过程、堆排序
定义按照堆的特点可以把堆分为大顶堆和小顶堆。大顶堆:每个结点的值都大于或等于其左右孩子结点的值;小顶堆:每个结点的值都小于或等于其左右孩子结点的值。(堆的这种特性非常的有用,堆常常被当做优先队列使用,因为可以快速的访问到“最重要”的元素)我们用简单的公式来描述一下堆的定义就是:大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]小顶堆:arr[i] <= arr[2i+1] && arr[.原创 2019-04-10 21:27:49 · 18411 阅读 · 1 评论 -
什么是递归
概念一说起递归,我想每个人都不陌生。举个从小就听过的例子:从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山,山里有座庙,庙里有个和尚,和尚在讲故事,从前有座山...还有你从两面相对的镜子中看到的画面,其实都是抽象出来的递归现象,但是严格来说并不是递归,因为会一直重复下去,没有终止条件,那就称为死循环了。有关递归和死循环的异同我们之后会说到,那么现在先来了解一下什么是递归?...原创 2019-04-09 10:03:21 · 236 阅读 · 0 评论 -
排序算法总结
排序算法涉及了广泛的算法分析技术,对排序问题的研究也促进了文件处理技术的发展,这里由于有些外排序问题在执行时必须不断地从外存读取信息(这部分信息由于太大而无法在内存中直接存放)。内排序(Internal Sort),则是指在内存中完成排序。以“存储在数组中的一组记录”为数据类型,数组中的每一个记录内部都有一个域成为排序关键码(Sort Key)。排序就是重排一组记录,使其关键码域的值具有规定的...原创 2019-03-25 20:23:55 · 354 阅读 · 0 评论