![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 83
不爱睡觉不爱起床的小Kiku
这个作者很懒,什么都没留下…
展开
-
算法分析与设计
【代码】算法分析与设计。原创 2023-12-01 17:23:07 · 64 阅读 · 0 评论 -
算法基础提升——大数据问题和位运算(C++)
32位无符号整数的范围是0~4,294,967,295,现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然存在没出现过的数。可以使用最多1GB的内存,怎么找到所有未出现过的数?【进阶】 内存限制为 10MB,但是只用找到一个没出现过的数即可。有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL。【补充】 某搜索公司一天的用户搜索词汇是海量的(百亿数据量),请设计一种求出每天热门Top100 词汇的可行办法。原创 2023-10-31 18:00:02 · 119 阅读 · 0 评论 -
算法基础提升——滑动窗口和单调栈(C++)
单调栈的目的是为了找到一个元素左边离它最近的且比它大的数及右边离它最近的且比它大的数。例如列表[8,5,4,6,7,],对于4来说,我们需要找到的是5和6;对于6来说,我们需要找到的是8和7。如果采用暴力方法,时间复杂度为,如果采用单调栈方法,时间复杂度为。单调栈也需要维持一个单调递减或递增的结构,若要求离某个数最近且比它大的数,使用栈底到栈顶单调减的结构;反之则使用单调增的结构。例如[5,4,3,6,1],求每个元素左边离它最近的且比它大的数及右边离它最近的且比它大的数,使用单调减结构。原创 2023-10-27 17:01:10 · 239 阅读 · 1 评论 -
算法基础提升——KMP,Manacher算法(C++)
【代码】算法基础提升——KMP,Manacher算法(C++)原创 2023-10-25 21:44:01 · 52 阅读 · 0 评论 -
算法基础提升——哈希函数和并查集(C++)
现在有40亿个数,数据均匀分布在0 ~上。要求在1G内存限制下,统计每个数字的出现次数,并输出出现次数最多的数字。insert(key):将某个key加入到该结构,做到不重复加入。delete(key):将原本在结构中的某个key移除。getRandom(): 等概率随机返回结构中的任何一个key。【要求】 Insert、delete和getRandom方法的时间复杂度都是O(1)布隆过滤器(Bloom Filter)实际上是一个很长的二进制向量和一系列随机映射函数。原创 2023-10-24 17:37:59 · 552 阅读 · 0 评论 -
算法基础提升——二叉树的树型dp和Morris遍历(C++)
从二叉树的节点 A 出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点 B 时,路径上的节点数叫作 A 到 B 的距离。现在给出一棵二叉树,求整棵树上每对节点之间的最大距离。二叉树节点间的最大距离问题__牛客网派对的最大快乐值__牛客网整个公司的人员结构可以看作是一棵标准的多叉树。树的头节点是公司唯一的老板,除老板外,每个员工都有唯一的直接上级,叶节点是没有任何下属的基层员工,除基层员工外,每个员工都有一个或多个直接下级,另外每个员工都有一个快乐值。原创 2023-10-28 21:28:27 · 115 阅读 · 0 评论 -
算法基础提升——动态规划(C++实现)
【题目】 假设有排成一行的 N 个位置,记为 1~N(N 一定大于或等于 2)。开始时机器人在其中的 M 位置上(M 一定在 1~N 中),机器人可以往左走或者往右走,如果机器人来到 1 位置, 那么下一步只能往右来到 2 位置;如果机器人来到 N 位置,那么下一步只能往左来到 N-1 位置。规定机器人必须走 K 步,最终能来到 P 位置(P 也一定在1~N 中)的方法有多少种。给 定四个参数 N、M、K、P,返回方法数。【举例】 N=5,M=2,K=3,P=3。原创 2023-10-20 21:33:00 · 292 阅读 · 0 评论 -
算法基础——暴力递归(C++实现)
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置n个金盘。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。打印n层汉诺塔从最左边移动到最右边的全部过程。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。题目给出一个字符串,要求打印出它所包含的所有子序列,包括空字符串。原创 2023-10-19 23:35:43 · 241 阅读 · 0 评论 -
(3)详解桶排序及排序大总结(C语言数据结构及算法)
2.将堆顶数与堆底数(完全二叉树中最后面的数)交换位置,最大数被放在队尾并移出堆结构。1.把无序数组构成大根堆(heapInsert函数),此时最大值被放在堆顶位置。3.将得到的新堆重新构成大根堆(heapify函数),第二大的数被放在堆顶位置。4.将堆顶数与堆底数(完全二叉树中最后面的数)交换位置,第二大的数被移出堆结构。5.重复上述操作,直到所有数都被移出堆。,上面两个重要操作的时间复杂度为。上面两段代码的时间复杂度都是。原创 2023-07-14 15:17:20 · 82 阅读 · 0 评论 -
(2)认识复杂度O(NlogN)的排序算法(C语言数据结构及算法)
(1)工作原理:使用递归函数,将无序数组不断二分成左右两个部分,每次递归返回左右两侧最大的数,直到无法划分为止。递归过程类似er于后序遍历的压栈过程。求中点的过程中若使用下面的写法,很容易导致溢出的现象发生:当L和R都足够大时,L+R会超出范围,若采用mid = L+(R-L)/2这种写法,可以避免出现L+R。原创 2023-07-13 21:21:16 · 157 阅读 · 1 评论 -
(1)简单排序算法详解(C语言数据结构及算法)
第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置(或末尾位置),然后再从剩余的未排序元素中寻找到最小(大)元素,继续放在起始位置(末尾位置),直到未排序元素个数为0。相邻的元素两两比较,较大的数下沉(往后移动),较小的数冒起来(往前移动),这样一趟比较下来,最大(小)值就会排列在一端。在冒泡排序中,遇到相等的值,是不进行交换的,只有遇到不相等的值才进行交换,所以是。在选择排序中,每趟都会选出最大元素与最小元素,然后与两端元素交换,此时,) ,平均时间复杂度是O(原创 2023-07-10 22:28:53 · 85 阅读 · 1 评论