数据结构&算法
leetcode题库
jeanlu
为工作写的博没想到也有人感兴趣hhh,评论留言看到会不定时回复(晚回见谅~
展开
-
数组/链表 & 堆/栈 & 指针/引用
数组和链表区别:A.从逻辑结构来看:a)数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当.数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费;数组可以根据下标直接存取。b)链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。( 数组中插入、删除数据项时,需要移动其它数据项,非常繁琐)链表必须根据next指针找到下- -个元素a) (静态)数组从栈中分配空间,对于程序员方便快速,但是自由度小b)链表从堆中分配空间,原创 2020-10-05 15:16:59 · 314 阅读 · 0 评论 -
python深拷贝和浅拷贝的区别
转载自:https://www.cnblogs.com/xiaxiaoxu/p/9742452.html简述首先深拷贝和浅拷贝都是对象的拷贝,都会生成一个看起来相同的对象,他们本质的区别是拷贝出来的对象的地址是否和原对象一样,也就是地址的复制还是值的复制的区别。深拷贝就是完全跟以前就没有任何关系了,原来的对象怎么改都不会影响当前对象浅拷贝原对象的list元素改变的话会改变当前对象,如果当...转载 2020-04-22 18:45:55 · 328 阅读 · 0 评论 -
C语言的编译过程
转载自:https://www.cnblogs.com/wuyouxiaocai/p/5701088.html#commentform 说实话,很多人做了很久的C/C++,也用了很多IDE,但是对于可执行程序的底层生成一片茫然,这无疑是一种悲哀,可以想象到大公司面试正好被问到这样的问题,有多悲催不言而喻,这里正由于换工作的缘故,所以打算系统的把之前用到的C/C++补一补。这里权且当做抛砖...转载 2020-04-22 17:25:28 · 220 阅读 · 0 评论 -
约瑟夫环 / 转圈中最后剩下的数字(第1个+第k个)
剑指offer:面试题62参考:https://blog.csdn.net/weixin_42659809/article/details/82596676一、题目概述30个游客同乘一条船,因为严重超载, 加上风浪大作,危险万分。因此船长告诉乘客,只有将全船 一半的旅客投入海中,其余人才能幸免于难。无奈,大家只 得同意这种办法,并议定30 个人围成一圈,由第一个人数起,依次报数,数到第9人,...原创 2020-04-15 10:08:15 · 660 阅读 · 0 评论 -
并查集(转载)
转自:超有爱的并查集~例子就是杭电上的畅通工程:http://acm.hdu.edu.cn/showproblem.php?pid=1232首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,...转载 2020-03-31 20:45:20 · 105 阅读 · 0 评论 -
哈希 & 布隆过滤器(转载)
转:https://blog.csdn.net/duoduo18up/article/details/80573040 哈希函数:常见的功能就是 打乱分布 均匀随机 输入无穷大 输出却在一定范围内 即使出现碰撞 但是每个输...转载 2020-03-31 20:33:34 · 211 阅读 · 0 评论 -
C++ ACM比赛专用对数器
用途:用于比赛的时候程序产生错误,却苦于无法找到错误的数据样例。使用方式每次对拍,只需要编辑sample(stringstream &sout)函数,即可生成样例。(建议先生成小范围数据)注意事项首先修改对数器里面的mpat("C:/Users/");为当前文件所在位置。当出现错误样例数超过5次,则会停止对拍。可以在sample文件夹下查看生成的错误样例。对拍程序...转载 2020-03-29 16:07:41 · 420 阅读 · 0 评论 -
比较器-各个数据结构的应用(c语言中的qsort函数)
qsort()函数实现的是c语言库的快排功能,由于额外空间的处理,相比自己写的更为优化。 注释:自己写的快排由于额外空间冗余,实际运行时会出现超出限制的报错。一、 一维qsort调用所包含的头文件 & 函数原型:#include <stdlib.h> void qsort(void* base, size_t num, size_t size, int (*com...原创 2020-03-28 00:30:13 · 872 阅读 · 0 评论 -
关于单链表环问题 & 相遇问题
关于单链表每个节点只有一个next节点环问题(两个有环链表拓扑结构)1.不相交:2.一个相交点:3.两个相交点:相遇问题相遇分为三种结构:1)有环:见上图 2.& 3.2)无环如下:具体题目 & 解题思路leetcode160 相交链表:编写一个程序,找到两个单链表相交的起始节点。1.快慢指针,快指针与慢指针相遇后,快指针回到head,和慢指针同时每...原创 2020-03-27 23:15:12 · 241 阅读 · 0 评论 -
递归 & master公式(主方法)
递归master公式(主方法) 用来利用分治策略来解决问题经常使用的时间复杂度的分析方法。分治策略的递归解法有两个常用的方法:代入法 ,递归树法。 分治策略中递归来求解问题分为三步:分解、解决,合并。主方法公式:T [n] = aT[n/b] + T (N^d)其中n表示问题的规模,即总样本数,a表示递归的次数,即生成的子问题数,b表示每次递归是原来的n/b之一个规模,d表示额外操...原创 2020-03-27 22:10:58 · 1402 阅读 · 0 评论 -
Leetcode1160. 拼写单词(C语言)
Leetcode1160. 拼写单词(C语言)题目:给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。假如可用 chars 中的字符拼写出 words 中的某个字符串,每个字符只能用一次,就为掌握了这个单词。返回词汇表 words 中你掌握的所有单词的 长度之和。例 :输入:words = [“cat”,“bt”,“hat”,“tree”], chars...原创 2020-03-18 08:59:25 · 694 阅读 · 0 评论 -
Leetcode836. 矩形重叠(C语言)
Leetcode836. 矩形重叠(C语言)题目:矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。给出两个矩形,判断它们是否重叠并返回结果。例:输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]输出...原创 2020-03-18 08:17:40 · 1083 阅读 · 0 评论 -
Leetcode695. 岛屿的最大面积(C语言)
Leetcode695. 岛屿的最大面积(C语言)题目:给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。)例:[[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0...原创 2020-03-16 22:50:16 · 1749 阅读 · 1 评论 -
Leetcode面试题 01.06. 字符串压缩(C语言)
Leetcode面试题 01.06. 字符串压缩(C语言)题目:字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。例:输入:“aabcccccaaa”输出:“a2b1c5a3”思路:记录当前值,再计数赋值...原创 2020-03-16 22:43:04 · 1174 阅读 · 0 评论 -
Leetcode300. 最长上升子序列(C语言)
Leetcode300. 最长上升子序列(C语言)题目:给定一个无序的整数数组,找到其中最长上升子序列的长度。例:*输入: [10,9,2,5,3,7,101,18]输出: 4 *解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。思路:法一:动态规划。第i个元素之前的最小上升子序列的长度无非就是max(dp[i],dp[j]+1);法二:二分查找法。dp[i]存...原创 2020-03-16 20:53:26 · 1082 阅读 · 0 评论 -
Leetcode169. 多数元素(C语言)
Leetcode169. 多数元素(C语言)题目:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。例:输入: [2,2,1,1,1,2,2]输出: 2思路:摩尔投票法。通过一个计数变量s,相同加,不相同减,变为0后换下一个;最后不是0即为结果。代码:int majori...原创 2020-03-16 11:12:47 · 609 阅读 · 0 评论 -
Leetcode1071. 字符串的最大公因子(C语言)
Leetcode1071. 字符串的最大公因子(C语言)题目:对于字符串 S 和 T,只有在 S = T + … + T(T 与自身连接 1 次或多次)时,我们才认定 “T 能除尽 S”。返回最长字符串 X,要求满足 X 能除尽 str1 且 X 能除尽 str2。例:输入:str1 = “ABCABC”, str2 = “ABC”输出:“ABC”思路:辗转相除。先求最大公因子长度;逐...原创 2020-03-16 10:42:58 · 431 阅读 · 1 评论 -
专题1:十大经典排序(转载)
0、排序算法说明0.1 排序的定义 对一序列对象根据某个关键字进行排序。 0.2 术语说明 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定 :如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序 :所有排序操作都在内...转载 2020-03-16 10:17:07 · 256 阅读 · 0 评论 -
Leetcode1013. 将数组分成和相等的三个部分(C语言)
Leetcode1013. 将数组分成和相等的三个部分(C语言)题目:给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + … + A[i] = A[i+1] + A[i+2] + … + A[j-1] = A[j] + A[j-1] + … + A[A.length ...原创 2020-03-16 09:33:01 · 562 阅读 · 0 评论 -
Leetcode面试题36. 二叉搜索树与双向链表(C++)
Leetcode面试题36. 二叉搜索树与双向链表(C++)题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。输入:[4,2,5,1,3]输出:[1,2,3,4,5]思路:中序遍历(左根右)...原创 2020-02-19 11:32:58 · 269 阅读 · 0 评论 -
Leetcode627. 交换工资(MySQL)
Leetcode627. 交换工资(MySQL)Leetcode-Database题目:SQL架构给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值。交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求只使用一个更新(Update)语句,并且没有中间的临时表。例:| id | name | sex | salary ||----|--...原创 2020-03-09 16:16:42 · 215 阅读 · 0 评论 -
面试题59 - II. 队列的最大值(C语言)
面试题59 - II. 队列的最大值(C语言)题目:请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。若队列为空,pop_front 和 max_value 需要返回 -1。例:输入:[“MaxQueue”,“push_back”,“push_back”,“max_value...原创 2020-03-09 16:03:28 · 422 阅读 · 0 评论 -
Leetcode684. 冗余连接(C语言)
Leetcode684. 冗余连接(C语言)数据结构-图(并查集):算法与数据结构参考题目:在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边(3<=N<=1000)。结果图是一个以边组成的二维数组。每一个边的元素是...原创 2020-03-01 21:41:51 · 410 阅读 · 0 评论 -
Leetcode785. 判断二分图(C语言)
Leetcode785. 判断二分图(C语言)数据结构-图(二分图):算法与数据结构参考题目:给定一个无向图graph,当这个图为二分图时返回true。如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个...原创 2020-03-01 21:18:22 · 958 阅读 · 0 评论 -
Leetcode232. 用栈实现队列(C语言)
Leetcode232. 用栈实现队列(C语言)数据结构-栈和队列:算法与数据结构参考题目:使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。例:输入:[“MyQueue”,“push”,“push”,“peek”,“pop”,“empty”][[...原创 2020-03-01 21:05:12 · 418 阅读 · 0 评论 -
Leetcode225. 用队列实现栈(C语言)
Leetcode225. 用队列实现栈(C语言)数据结构-栈和队列:算法与数据结构参考题目:使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空输入:[“MyStack”,“push”,“push”,“top”,“pop”,“empty”][[],[1],[2],[],[],[]]...原创 2020-03-01 20:58:06 · 671 阅读 · 1 评论 -
Leetcode307. 区域和检索 - 数组可修改(C语言)
Leetcode307. 区域和检索 - 数组可修改(C语言)题目:给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。update(i, val) 函数可以通过将下标为 i 的数值更新为 val,从而对数列进行修改。例:输入:[“NumArray”,“sumRange”,“update”,“sumRange”][[[1,3...原创 2020-02-24 09:06:41 · 287 阅读 · 0 评论 -
Leetcode1. 两数之和(C语言)
Leetcode1. 两数之和(C语言)数据结构-哈希表:算法与数据结构参考题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。不能重复利用这个数组中同样的元素。例:输入:[2, 7, 11, 15] 9输出:[0, 1]因为 nums[0] + nums[1] = 2 + 7 = 9思路:(法1:暴力...原创 2020-02-23 10:21:30 · 601 阅读 · 0 评论 -
Leetcode409. 最长回文串(C语言)
Leetcode409. 最长回文串(C语言)数据结构-字符串:算法与数据结构参考题目:给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造中注意区分大小写。例:输入:“abccccdd”输出:7解释:可构造的最长的回文串是"dccaccd", 它的长度是 7。思路:构造哈希表,看每个元素数量的奇偶性。注意不止一个元素奇数个数的处理代码:int...原创 2020-02-17 13:30:12 · 713 阅读 · 0 评论 -
Leetcode242. 有效的字母异位词(C语言)
Leetcode242. 有效的字母异位词(C语言)数据结构-字符串:算法与数据结构参考题目:给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。例:输入: s = “anagram”, t = “nagaram”输出: true思路:构造哈希表,判断相应字符数量一样即可。代码:bool isAnagram(char * s, char * t){...原创 2020-02-17 11:24:12 · 286 阅读 · 0 评论 -
Leetcode144. 二叉树的前序遍历(C语言)
Leetcode144. 二叉树的前序遍历(C语言)数据结构-树:算法与数据结构参考题目:给定一个二叉树,返回它的 前序 遍历。(进阶: 递归算法很简单,你可以通过迭代算法完成吗?)例:输入: [1,null,2,3]输出: [1,2,3]思路:前序遍历(根,左,右),用一个栈存储右节点;迭代遍历,根的顺序即输出结果。代码:/** * Definition for a bin...原创 2020-02-15 14:53:35 · 961 阅读 · 0 评论 -
Leetcode513. 找树左下角的值(C语言)
Leetcode513. 找树左下角的值(C语言)数据结构-树:算法与数据结构参考题目:给定一个二叉树,在树的最后一行找到最左边的值。输入:[1,2,3,4,null,5,6,null,null,7]输出:7思路:先序遍历(根,左,右),每次/层 存储最左节点值代码:/** * Definition for a binary tree node. * struct Tree...原创 2020-02-15 13:58:10 · 279 阅读 · 0 评论 -
Leetcode637. 二叉树的层平均值(C语言)
Leetcode637. 二叉树的层平均值(C语言)数据结构-树:算法与数据结构参考题目:给定一个非空二叉树, 返回一个由每层节点平均值(32位有符号整数范围内)组成的数组.例:输入:[3,9,20,15,7]输出: [3, 14.5, 11]思路:一个数组存储每一层节点,一个数组存储每一层平均值,输出平均值数组。注意节点总下标还是行下标,以及相应计算条件代码:/** * D...原创 2020-02-15 13:35:56 · 586 阅读 · 0 评论 -
Leetcode671. 二叉树中第二小的节点(C语言)
Leetcode671. 二叉树中第二小的节点(C语言)数据结构-树:算法与数据结构参考题目:给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值。 输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。例:输入: [2,2,5,null,null,5,7]输出: 5思...原创 2020-02-15 11:52:55 · 201 阅读 · 0 评论 -
Leetcode337. 打家劫舍 III(C语言)
Leetcode337. 打家劫舍 III(C语言)数据结构-树:算法与数据结构参考题目:在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警...原创 2020-02-15 11:26:01 · 686 阅读 · 0 评论 -
Leetcode687. 最长同值路径(C语言)
Leetcode687. 最长同值路径(C语言)数据结构-树:算法与数据结构参考题目:给定一个二叉树,找到最长的路径1,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。例:输入:[5,4,5,1,1,null,5]输出:2思路:递归,注意从根开始的同值路径的处理,分不同可能情况考虑。代码:/** * Definition for a binary tre...原创 2020-02-13 15:51:32 · 292 阅读 · 0 评论 -
Leetcode404. 左叶子之和(C语言)
Leetcode404. 左叶子之和(C语言)数据结构-树:算法与数据结构参考题目:计算给定二叉树的所有左叶子之和。例:*输入:[3,9,20,null,null,15,17]输出:24思路:找出左叶子(需要判断是否为叶子节点),累加。代码:/** * Definition for a binary tree node. * struct TreeNode { * ...原创 2020-02-13 15:18:35 · 468 阅读 · 0 评论 -
Leetcode111. 二叉树的最小深度(C语言)
Leetcode111. 二叉树的最小深度(C语言)数据结构-树:算法与数据结构参考题目:给定一个二叉树,找出其最小深度1。例:输入: [3,9,20,null,null,15,7],输出:2思路:递归,可以看作从最后一个结点开始计算最小深度,每次递归加上根的1。代码:/** * Definition for a binary tree node. * struct Tre...原创 2020-02-13 15:05:52 · 495 阅读 · 0 评论 -
Leetcode101. 对称二叉树(C语言)
Leetcode101. 对称二叉树(C语言)数据结构-树:算法与数据结构参考题目:给定一个二叉树,检查它是否是镜像对称的。例:输入: [1,2,2,3,4,4,3]输出:true思路:递归,由于只有根和左右子树完全对称,不能直接递归,所以要考虑构造一个判断两个树对称的函数。注意考虑到所有特殊情况代码:/** * Definition for a binary tree no...原创 2020-02-13 14:51:51 · 592 阅读 · 0 评论 -
Leetcode572. 另一个树的子树(C语言)
Leetcode572. 另一个树的子树(C语言)数据结构-树:算法与数据结构参考题目:给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点 和 这个节点的所有子孙。s 也可以看做它自身的一棵子树。例:输入:[3,4,5,1,2,0] [4,1,2]输出:false思路:两次递归,注意根节点另外处理代码:/...原创 2020-02-12 12:22:37 · 209 阅读 · 0 评论