
Leetcode
文章平均质量分 62
CrazyPixel
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 33. 二叉搜索树的后序遍历序列(java解题)
leetcode《图解数据结构》剑指 Offer 33. 二叉搜索树的后序遍历序列(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。原创 2023-04-22 22:32:34 · 614 阅读 · 1 评论 -
剑指 Offer 17. 打印从 1 到最大的 n 位数(java解题)
leetcode《图解数据结构》剑指 Offer 17. 打印从 1 到最大的 n 位数(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。原创 2023-03-23 15:09:36 · 309 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树(java解题)
leetcode《图解数据结构》剑指 Offer 07. 重建二叉树(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。原创 2023-03-21 10:25:20 · 335 阅读 · 0 评论 -
剑指 Offer 68 - II. 二叉树的最近公共祖先(java解题)
leetcode《图解数据结构》剑指 Offer 68 - II. 二叉树的最近公共祖先(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。原创 2023-03-14 11:19:50 · 368 阅读 · 0 评论 -
剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java解题)
leetcode《图解数据结构》剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。原创 2023-03-09 10:58:41 · 312 阅读 · 0 评论 -
剑指 Offer 64. 求 1 + 2 + … + n(java解题)
leetcode《图解数据结构》剑指 Offer 64. 求 1 + 2 + … + n(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。原创 2023-03-02 11:05:05 · 452 阅读 · 0 评论 -
剑指 Offer 55 - II. 平衡二叉树(java解题)
leetcode《图解数据结构》剑指 Offer 55 - II. 平衡二叉树(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。原创 2023-02-28 15:08:49 · 299 阅读 · 0 评论 -
剑指 Offer 55 - I. 二叉树的深度(java解题)
leetcode《图解数据结构》剑指 Offer 55 - I. 二叉树的深度(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。原创 2023-02-27 15:00:50 · 449 阅读 · 0 评论 -
Java刷题常用的数据结构总结
本文主要介绍了在java刷题的过程中常用的数据结构和常用的内置函数,适合新手入门使用。原创 2023-02-26 15:23:52 · 331 阅读 · 0 评论 -
剑指 Offer 34. 二叉树中和为某一值的路径(java解题)
leetcode《图解数据结构》剑指 Offer 34. 二叉树中和为某一值的路径(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。原创 2023-02-19 10:55:36 · 491 阅读 · 0 评论 -
剑指 Offer 32 - III. 从上到下打印二叉树 III(java解题)
leetcode《图解数据结构》剑指 Offer 32 - III. 从上到下打印二叉树 III(java解题)的解题思路和java代码,并附上java中常用数据结构的功能函数。原创 2023-02-14 11:13:37 · 414 阅读 · 0 评论 -
剑指 Offer 32 - II. 从上到下打印二叉树 II(java解题)
leetcode《图解数据结构》剑指 Offer 32 - II. 从上到下打印二叉树II 的解题思路和java代码,并附上java中常用数据结构的功能函数。 阅原创 2023-02-13 11:20:04 · 475 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树(java解题)
剑指 Offer 32 - I. 从上到下打印二叉树(java解题)leetcode《图解数据结构》剑指 Offer 32 - I. 从上到下打印二叉树的解题思路和java代码,并附上java中常用数据结构的功能函数。原创 2023-02-11 19:57:33 · 836 阅读 · 0 评论 -
leetcode《图解数据结构》刷题日志【第五周】(2022/11/21-2022/11/28)
leetcode《图解数据结构》的刷题记录,包含解题思路、java代码和遇到的一些错误类型与君共勉原创 2022-11-27 20:57:10 · 960 阅读 · 0 评论 -
leetcode《图解数据结构》刷题日志【第四周】(2022/11/07-2022/11/20)
leetcode《图解数据结构》的刷题记录,包含解题思路、java代码和遇到的一些错误类型与君共勉原创 2022-11-20 15:07:14 · 948 阅读 · 0 评论 -
Leetcode《图解数据结构》刷题日志【第三周】(2022/10/31-2022/11/06)
leetcode《图解数据结构》刷题日志,主要讲解题目思路、java代码以及遇到的错误,作为学习记录,如果能够帮助你理解代码思路那就再好不过了。原创 2022-11-06 20:05:54 · 644 阅读 · 0 评论 -
Leetcode《图解数据结构》刷题日志【第二周】(2022/10/24-2022/10/30)
leetcode《图解数据结构》刷题记录,包括题目思路和java代码原创 2022-10-30 22:48:25 · 830 阅读 · 0 评论 -
计算机导论第5周课后作业题解1014~1021【考前练习】
北京邮电大学计算机导论第5周课后作业题解,考前练习所包含的六道题,供有需要的同学复习参考。原创 2022-10-23 22:01:00 · 248 阅读 · 0 评论 -
图解数据结构刷题日志【第一周】(2022/10/20-2022/10/23)
leetcode刷题,《图解数据结构》的相关题目原创 2022-10-23 18:14:55 · 733 阅读 · 0 评论 -
PTA-6-10 阶乘计算升级版 (20 分)解法记录
题目描述题目分析此处是6-8的进阶版,N出现了>12的情况。我们先来梳理一下int/long int/long long int型的表示范围。int和long int 占4B,共32位,可表示232位的无符号数,考虑到210=103,因此可以认为表示的范围约为109.long long int 占8B,共64位,可表示264位的无符号数,因此可以认为表示的范围约为1018.根据述# 题目分析此处是6-8的进阶版,N出现了>12的情况。我们先来梳理一下int/long int/l原创 2022-03-25 22:38:41 · 853 阅读 · 0 评论 -
leetcode 674.最长连续递增序列(C/C++/Java/python)
PS:算法并非原创,仅作个人学习记录使用,侵删。题目描述算法分析个人的思路是:遍历一遍数组,对每一个递增段进行长度计数,结束时将当前递增段长度结果和已知的最长序列长度进行比较,不断维护更新已知最长序列长度,遍历完成后得出结果。这种做法也是最容易理解和想到的想法。此外,还有双指针法【C++实现】、贪心法【java实现】、动态规划法【python实现】。其中,贪心法利用双指针,每轮遍历都会维护最终结果,其性能是上述几种算法中最好的。代码实现【C】/*该思路也就是“算法分析”中的个人思路。原创 2021-01-24 00:59:19 · 245 阅读 · 0 评论 -
leetcode 1319.连通网络的操作次数
PS:算法并非原创,仅作个人学习记录使用,侵删题目描述题目完整描述算法分析乍看题目,应该又是图论方面的知识,可能又需要用到并查集。这里如果已经连接的那个连通分量中有环的话,则可以拆掉用来连接这个连通分量和一个电脑,所以应该就是统计除了这个连通分量之外的电脑数量A,和连通分量中的环个数B相比较,如果A>B,说明可拆卸的电缆数目不足,如果A<=B,说明可以连接所有电脑,且结果为A。看了大佬们的题解之后,我也发现了自己思维方式里面的局限性,那就是没有考虑多个独立的连通分量(且成员数大于1原创 2021-01-23 00:56:04 · 228 阅读 · 2 评论 -
leetcode 989.数组形式的整数加法(C/C++/Java/python)
PS:算法并非原创,仅作个人学习记录使用,侵删题目描述算法分析本人初步的思路是:先把数组转化为整数,然后进行加法运算,之后将加法结果不断除10取余转化为数组。这也是本篇中的python解法。但是在文章末尾,可以看到这种做法运行耗时非常大,原因在于测试数据里面有较大的整数相加,当出现这种情况时,python那种解法就不是很理想了。所以本题使用了整数相加的相关法则,一种方式是将K转为数组,之后进行诸位相加和进位;另一种是K和A的每位进行相加,并截去个位。但是我总觉得这种方式和计算机内部的二进制加法原创 2021-01-22 00:33:50 · 233 阅读 · 0 评论 -
leetcode 628.三个数的最大乘积 (C/C++/Java/python)
PS:算法并非原创,仅作个人学习记录使用,侵删题目描述算法分析第一思路是:排序(合并排序、快速排序之类的),然后选择最大的三个数进行乘法运算。而在诸多的排序算法中,快速排序似乎更符合需求,因为可以通过分段近似实现折半处理。或者,不需要手写代码,利用C++和Java中的sort函数即可直接进行排序和元素选择。更加简单的思路则是三次遍历数组,找出第一、第二、第三大的数。看了一些题解和讨论之后,很高兴自己的思路基本上正确的,但是有一个致命的问题我没有考虑到,就是整数的正负性。三个数的最大乘积,可原创 2021-01-20 17:38:47 · 216 阅读 · 1 评论 -
leetcode 1584.连接所有点的最小费用(C/C++/Java/python)
PS:算法并非原创,仅作个人学习记录使用,侵删题目描述题目链接算法分析看到题目之后我的算法思路是:最小生成树,将点都连接起来形成图,权重为距离,之后利用K算法或者P算法解答。复习一下:最小生成树的K算法和P算法都属于贪心算法的范畴,且都利用了最小生成树性质(最小生成树一定包含最小权边),两者都在不断地寻找最小边,但是K算法侧重于对边的分类,P算法侧重于对顶点的分类。K算法:Kruskal算法,将边按照权重排序,并按照权重递增的顺序查看每一条边。对于选中的边,如果两端的顶点属于两个不同的连通分原创 2021-01-19 14:28:39 · 461 阅读 · 0 评论 -
leetcode721.账户合并(C/C++/Java/python)
PS:算法并非原创,仅作个人学习记录使用,侵删题目描述算法分析个人的算法思路是:先合并相同账号,然后对每个账号的邮箱数组可以逐个进行字符串排序。但是问题就在于:如何合并相同的账号?根据题目的意思,两个账号是否相同似乎只有一个评判标准:两个帐号是不是使用相同的邮箱地址。如果逐个比较的话,账号之间的配对相当多,似乎不是一个很好的方法。但我也没办法想出更棒的想法了。后来看了一些大佬的题解,没想到啊,竟然还能用并查集来解决。并查集,yyds!以下是官方题解:代码实现【C】/*C语言解法:原创 2021-01-18 13:39:09 · 553 阅读 · 0 评论 -
leetcode1232.缀点成线(C/C++/Java/python)
PS:算法并非原创,仅作个人学习记录使用,侵删题目描述算法分析这道题目看起来难度不高,判断多点共线问题似乎是高中数学里面就学过的算法思路。所以一开始,我的算法思路和斜率有关。可以根据“两点确定一条直线”,可以算出一个参考的斜率,根据参考的斜率预测下一个坐标点的位置(可以已知x坐标求y坐标)。或者每个点都和第一个点进行斜率计算,得出的结果如果总是相同,则多点共线。而大佬们的算法博客中,思路基本上也是如此:计算第i个点、第i-1个点、第i+1个点之间的斜率;【Java解法、C语言解法】计算第原创 2021-01-17 22:10:48 · 407 阅读 · 0 评论 -
leetcode 803.打砖块(C/C++/Java/python)
PS:算法并非原创,仅作个人学习使用,侵删题目描述算法分析经过几题图论和并查集的磨练,我知道这道题肯定能用并查集的方法做出来。但是具体怎么使用并查集之类的图论算法呢?一开始我没什么思路,这道题目有点类似泡泡龙游戏,我并没有什么很好的思路。后来看了官方的题解,和顶部相连的砖块不会掉落,只能击打实现砖块消失。并查集将两个连通分量合并,击打砖块则是让一个连通分量分成两部分,所以需要“逆用”并查集。使用的方法就是根据hit的元素顺序将对应位置的砖块顺序击打(gird中对应位置值置为0),之后进行连通分原创 2021-01-16 21:36:21 · 375 阅读 · 1 评论 -
leetcode 35.搜索插入位置(C/C++/Java/python)
PS:算法并非原创,仅作个人学习记录使用,侵删题目描述算法分析个人的思路是在排序数组中依次遍历,如果比待插入元素小,则下标向后移动,直到遇到下标大于等于插入元素,此时的下标值就是结果。或者采用二分法,更快的确定搜索范围。后续的洛谷题解中,二分法基本上是算法实现的主流。也有一些直接使用已有函数一步到位的“神仙”操作,不过需要个人对于语言的函数库有很好的理解和掌握,像我这种凡人小白暂时还用不上这种方法。代码实现【C】/*二分法的递归写法*/int searchInsert(int* n原创 2021-01-15 14:43:03 · 197 阅读 · 2 评论 -
leetcode 947.移除最多的同行或同列
PS:算法并非原创,仅作个人学习记录使用,侵删题目描述算法分析个人的初步思路是:从后往前遍历坐标数组,而每个坐标的移除与否需要再查找一遍整个数组的x坐标和y坐标。如果有相同部分,则可以移除。可以移除则结果遍历加一。后来查看官方题解以及一些博客的算法思路,果然还是图论。又是一道能用经典的并查集思路解题的算法题。能够用到并查集的原因是:同行同列的元素可以看作一个连通分量,这个连通分量可以删除到只剩下一个元素。棋盘中存在多少个不同的连通分量,就会剩下多少个最后的棋子,而其他的棋子都会被移除掉,所以最原创 2021-01-15 14:16:03 · 182 阅读 · 0 评论 -
leetcode 1018.可被5整除的二进制前缀 (C/C++/java/python)
PS:算法并非原创,仅作个人学习记录使用,侵删题目描述算法分析个人的初步想法是:遍历整个数组,然后每一个二进制都转化为十进制,这个可以用一个函数来表示,然后判断整数之间的整除关系。毫无疑问,这种算法将会导致大量的无用计算。更进一步的改进方案可以存储之前遍历的结果,因为第i位的二进制的值其实依赖于第i-1位的二进制值。如果不采用整数,而采取二进制的算法的话,我似乎没发现被5整除的二进制有什么规律可循。各类博客的算法基本上都是计算整数值来判断整除的操作【python解法】。稍微改进一点的算法略有不同原创 2021-01-14 22:01:54 · 247 阅读 · 2 评论 -
leetcode 1203.项目管理(C/C++/java/python)
PS:算法并非原创,仅作个人学习记录使用,侵删题目描述算法分析一开始看到这类项目时间安排的题目,我就想起来算法里面的贪心算法。但是仔细想想,贪心算法涉及到具体的时间,且项目之间没有依赖关系。而这里的项目之间存在明显的依赖关系,于是我又想起了拓扑排序,也就是将项目作为结点,依赖关系作为边,建立有向图,然后根据有向图得出拓扑排序的序列。如果图中出现环,则说明排序无解。代码实现【C】/*算法思想:拓扑排序*/int* topSort(int* returnSize, int* deg, int原创 2021-01-14 21:08:50 · 271 阅读 · 1 评论 -
leetcode 684.冗余连接(C/C++/java/python)
PS:算法并非原创,仅作个人学习记录使用,侵删。题目描述算法分析这道题很明显和图论相关,并且涉及到顶点之间的关联关系,所以首先想到的思路还是并查集、深度优先遍历、广度优先遍历三种常见的解题方式。根据已知的数组条件构造出图之后,存在一个冗余的边界条件,可以从后往前进行排查。不过,这里让我不由想起了最小生成树的相关算法,也可在产生最小生成树的时候,有意识地按照数组排列顺序的优先级进行判断。这就和并查集的思想相差无几了。那就每次选择排列靠前的边,来连接两个不同的连通分量,相同的连通分量内部的顶点不再进原创 2021-01-13 14:34:56 · 269 阅读 · 1 评论 -
leetcode 1202.交换字符串中的元素(C/C++/Java/python)
PS:算法并非原创,仅作个人学习记录使用,侵删题目描述算法分析阅读完题目之后,我个人没什么具体的思路。穷举法肯定是不行的,因为任意多次交换意味着有无穷种情况,其次我不知道如何才能表示“最小字典序”这个结果要求。看了一些算法博客的分析以及leetcode官方的题解,这一题可以用三种方式解答:并查集、DFS、BFS,每一种的使用前提都是图论。这一题和我之前刷到过的一道题的题解方法类似——leetcode 547.省份数量刷题记录在本题中,建立图的方式是:数组中每个字符作为一个顶点,在pairs数组原创 2021-01-12 17:17:37 · 374 阅读 · 0 评论 -
leetcode 228.汇总区间(C/C++/java/python)
PS:算法并非原创,仅作个人学习记录使用,侵删题目描述算法分析个人的算法思路是:遍历一遍数组,每次根据是否连续进行数组分割和结果记录。后来在看了各类算法博客之后,大致上都是这种思路,但是可以采用“双指针”方法使得算法更加清晰。代码实现【C】/*该算法实现使用了双指针方法,分别指向连续区间的起始位置和终止位置*/char** summaryRanges(int* nums, int numsSize, int* returnSize) { //nums:待处理数组,numsSiz原创 2021-01-12 14:35:13 · 277 阅读 · 0 评论 -
leetcode 123. 买卖股票的最佳时机 III (C/C++/java/python)
PS:算法并非原创,仅作个人学习记录使用,侵删。题目描述算法分析去年刷初级算法题目的时候刷到过它的系列兄弟题目——121.买卖股票的最佳时机。当时这道题目的解题思路里面,最让我印象深刻的是找谷峰和谷底(先底,后峰,先买后卖),峰谷值相减就是买卖的利润值。这一系列的题目,在交易的次数上做了修改(121是只能买卖一次,122是尽可能多的买卖,123是最多买卖2次)。在这种比较之下,我个人的算法思路是:依然分段在每个谷底和谷峰寻找,得到现阶段买卖的最优值,然后参考结果存入两个数据。每个利润值需要原创 2021-01-09 14:58:34 · 244 阅读 · 0 评论 -
leetcode 189.旋转数组(C\C++\java\python)
PS:算法并非原创,仅作个人学习记录使用,侵删。题目描述算法分析看到题目的初步算法思路是:将数组转化为类链表结构,用一个指示下标的指针,向右移动k个(超过k就k%n)个元素大小,然后从当前指针为开始指针,得到结果。但是没办法做到原地算法。还有一种思路也比较简单:截取,根据k将数组截取为两部分,然后互换,依然没办法做到原地算法。还有一种不算是我的思路,算是我记得的一种算法:三次逆转,按照k将数组截取为前后两部分,两部分分别在原数组空间逆转,之后再将整个数组再次逆转,三次逆转之后将会得到正确结果。原创 2021-01-08 20:50:35 · 130 阅读 · 0 评论 -
leetcode 9、回文数(C/C++/JAVA/python)
PS:算法并非原创,仅用于记录个人学习,侵删。题目详情算法分析:个人的算法思路:1、将整数转化为字符串,然后将字符串倒置,两个字符串进行比较。2、将整数转化为字符串,然后用首尾两个指针进行字符逐个对比(本文中的python实现)之后阅读了前辈们的算法实现,又发现了其他满足进阶要求的算法思路:1、将整数拆分存入整型数组,然后双指针比较(本文中的C实现)2、将整数颠倒得到一个新的数据,比较两者是否相等(本文中的C++实现)3、将整数的后半段颠倒,判断是不是和前半段相等,如果相等则是回文原创 2021-01-07 16:41:47 · 318 阅读 · 0 评论 -
leetcode 6.Z字形变换(C/C++/java/python)
PS:算法并非原创,仅用于记录个人学习,侵删。题目详情算法解析个人的思路如下:设计一个二维字符数组,它的尺寸可以通过numRows计算得出。之后根据规则进行Z字形填入,然后再将二维字符数组按行转化为字符串。代码实现【C】char * convert(char * s, int numRows){ int len = 0, row = 0, i = 0, j = 0, k = 0; char *pstr; pstr = s; //如果字符串为s或者Z字原创 2021-01-07 16:03:56 · 296 阅读 · 1 评论 -
leetcode 547.省份数量(C\C++\java\python)
PS:算法并非原创,仅作个人学习记录使用,侵删。题目描述算法思路分析首先看到这道题目的时候,个人的想法就是使用图论里面的“连通分量”这一个概念,这在最小生成树的prim算法中也有使用到。所以就用一个二维矩阵存储邻接矩阵,然后再用一个联通数组指明哪些结点属于一个连通分量,之后再统一计数即可。代码实现:【C】/*算法简介:通过visitd数组,从头遍历城市数组,每个城市都通过深度遍历查找所有连接城市,并将这些城市做上“记号”。这样每个连通分量只统计一次,且每个连通分量都不会有遗漏*/v原创 2021-01-07 15:53:55 · 787 阅读 · 0 评论