自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 【经典算法】LeetCode 72. 编辑距离(Java/C/Python3/Go实现含注释说明,中等)

方式优点缺点时间复杂度空间复杂度方式一逻辑清晰,易于实现需要额外的空间来保存子问题的解O(m * n)O(m * n)

2024-05-06 23:44:29 787 1

原创 【经典算法】LeetCode 200. 岛屿数量(Java/C/Python3/Go实现含注释说明,中等)

方式优点缺点时间复杂度空间复杂度DFS实现简单,容易理解在最坏情况下,空间复杂度较高O(mn)O(mn)(DFS栈空间)

2024-05-05 21:44:40 1422

原创 【经典算法】LeetCode 189. 轮转数组(Java/C/Python3/Go实现含注释说明,中等)

方式优点缺点时间复杂度空间复杂度方式一空间复杂度低,仅使用常数额外空间逻辑相对复杂,需要进行三次翻转O(n)O(1)方式二逻辑直观,易于理解需要使用额外的空间O(n)O(n)

2024-05-03 21:34:47 555

原创 【经典算法】LeetCode 160. 相交链表(Java/C/Python3/Go实现含注释说明,Easy)

方式优点缺点时间复杂度空间复杂度方式一(哈希表)不依赖链表结构,灵活性强需要额外的哈希表空间O(m + n)O(m)方式二(双指针)代码简洁,空间复杂度低需要处理两个链表可能不相交的情况O(m + n)O(1)

2024-05-02 17:55:52 1110 1

原创 【经典算法】LeetCode 108. 将有序数组转换为二叉搜索树(Java/C/Python3/Go实现含注释说明,Easy)

方式优点缺点时间复杂度空间复杂度其他递归中值法1. 代码简洁,逻辑清晰。1. 在最坏情况下,递归调用栈可能会占用额外的 O(n) 空间。O(n)平均 O(log n),最坏 O(n)1. 易于理解和实现。迭代栈方法1. 避免了递归调用栈可能导致的空间问题。1. 相比递归方法,代码可能略显复杂。O(n)平均 O(log n),最坏 O(n)1. 更节省空间,适合处理大数据集。说明递归中值法:该方法直接通过递归找到数组的中值作为根节点,然后递归地构建左子树和右子树。

2024-05-01 13:37:49 1388 3

原创 LeetCode 110.平衡二叉树(Java/C/Python3/Go实现含注释说明,Easy)

方式优点缺点时间复杂度空间复杂度方式一(自顶向下递归)直观易理解,直接根据定义判断可能产生大量重复计算,效率较低O(n)O(h)(h为树的高度,最坏情况下为O(n))方式二(自底向上递归)利用后序遍历减少重复计算,效率高依赖于递归和高度差的比较,可能难以理解O(n)O(h)(h为树的高度,最坏情况下为O(n))注意:在方式二中,虽然空间复杂度在最坏情况下为O(n),但这是因为递归调用栈的深度可能达到n。在平均情况下,对于平衡树,空间复杂度为O(log n)。

2024-04-30 17:41:57 986 1

原创 【经典算法】LeetCode 111 二叉树的最小深度(Java/C/Python3/Go实现含注释说明,Easy)

以下是使用深度优先搜索(DFS)和广度优先搜索(BFS)两种方式实现二叉树最小深度计算的总结表格。请注意,这里我们只对比DFS和BFS两种算法在解决二叉树最小深度问题时的特点,不涉及具体语言实现。方式优点缺点时间复杂度空间复杂度其他DFS代码相对简洁可能会遍历不必要的节点O(n)O(h),h为树的高度适用于树不平衡的情况BFS直观且易于理解需要使用队列,可能增加代码复杂度O(n)O(n)适用于树平衡或接近平衡的情况DFS优点。

2024-04-29 11:29:27 1666 2

原创 【经典算法】Leetcode.83删除排序链表中的重复元素(Java/C/Python3/Go实现含注释说明,Easy)

方式优点缺点时间复杂度空间复杂度方式一(双指针迭代)不使用递归,内存占用稳定代码相对复杂,需要处理边界情况O(n)O(1)方式二(递归)代码简洁,逻辑清晰递归深度可能导致栈溢出,内存占用不稳定O(n)O(n)

2024-04-28 23:52:56 1703

原创 【经典算法】LeetCode 66. 加一(Java/C/Python3实现含注释说明,简单)

给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位,数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。

2024-04-27 23:40:23 528

原创 【经典算法】LeetCode31. 下一个排列(Java/C/Python3/GO实现含注释说明,中等)

方式优点缺点时间复杂度空间复杂度方式一原数组操作,只使用额外常量空间代码实现相对复杂O(n)O(1)方式二代码简洁,利用了内置函数违反了题目要求的原数组操作和常量空间限制O(n log n)O(n)

2024-04-26 23:58:49 1290 3

原创 【经典算法】LeetCode104二叉树的最大深度(Java/C/Python3实现含注释说明,Easy)

方式优点缺点时间复杂度空间复杂度递归深度优先搜索代码直观,易于理解递归可能导致栈溢出,对于深层树效率较低O(n)O(h)非递归深度优先搜索避免递归栈溢出,适用于深层树需要手动维护栈,代码相对复杂O(n)O(h)广度优先搜索层次遍历,易于实现需要额外的队列空间,空间复杂度较高O(n)O(n)

2024-04-25 20:38:31 926 1

原创 【经典算法】LeetCode 148. 排序链表(Java/C/Python3实现含注释说明,中等)

方式优点缺点时间复杂度空间复杂度插入排序链表实现简单直观时间复杂度较高,为O(n^2)O(n^2)O(1)归并排序链表时间复杂度较低,为O(n log n)需要额外空间进行递归或合并操作O(n log n)O(n) 或 O(log n)(原地归并)注意:这里的空间复杂度是相对于链表本身大小n而言的。插入排序是原地排序,不需要额外空间(除了常数级别的空间),所以空间复杂度为O(1)。

2024-04-25 00:13:48 1057 1

原创 【经典算法】LeetCode24. 两两交换链表中的节点(Java/C/Python3/Golang实现含注释说明,中等)

方式优点缺点时间复杂度空间复杂度其他迭代法(使用哑节点)代码简洁,易于理解需要额外的哑节点O(n)O(1)适用于链表头部处理迭代法(不使用哑节点)不需要额外空间(除了变量)处理链表头部时稍复杂O(n)O(1)需特别注意链表头部的变化递归法代码优雅,易于理解可能存在栈溢出风险,空间效率不如迭代法O(n)O(n)(递归栈空间)适用于链表长度较短的情况在以上三种方式中,迭代法(不使用哑节点)和递归法都是直接对原链表进行操作,不需要额外的节点空间(除了必要的变量)。

2024-04-22 20:48:34 867

原创 【经典算法】LeetCode 29两数相除 (Java/C/Python3/Golang实现含注释说明,中等)

无论是使用哪种编程语言,实现整数除法的基本思路都是类似的。关键在于处理特殊情况(如被除数为最小值且除数为-1时),以及使用高效的算法来减少计算量。在实际应用中,还需要考虑语言的特性和限制,比如整数溢出的问题。在Python中,由于整数类型可以自动处理大整数,所以不需要担心溢出问题。在其他语言中,比如Java和C语言,需要特别注意整数溢出的情况,并进行适当的处理。按照实现方式聚类,可以将上述表格中的语言实现分为两大类:常规除法和位运算优化。

2024-04-22 00:05:20 862 1

原创 【经典算法】LeetCode 7 整数反转(Java/C/Python3/Golang实现含注释说明,中等)

方式优点缺点时间复杂度空间复杂度字符串易于理解和实现,适用于多种语言使用了额外的字符串,可能增加内存消耗O(n)O(n)数学不使用额外空间,效率较高实现相对复杂,需要处理溢出情况O(n)O(1)

2024-04-21 15:49:56 885 2

原创 【经典算法】LeetCode 121. 买卖股票的最佳时机(Java/C/Python3实现含注释说明,Easy)

对比项一次遍历(贪心算法)动态规划解题思路每次选择当前状态下的最优解,不考虑未来的变化构建状态转移方程,逐步求解,保存中间结果适用场景局部最优选择能直接导致全局最优,如连续上涨的市场涉及多次买入卖出、考虑冷冻期、手续费等复杂情况空间复杂度O(1),较低,只需保存当前状态信息O(n),较高,需保存多个状态的最优解时间复杂度O(n), 较低,通常一次遍历即可O(n),较高,需遍历所有可能状态全局最优性保证不一定能保证全局最优解可以得到全局最优解灵活性较低,适用于简单直接的交易策略。

2024-04-20 23:28:15 1340 2

原创 力扣169. 多数元素(Java/C/Python3实现含注释说明,简单)

方法思路时间复杂度空间复杂度排序法对数组进行排序,众数位于中间位置O(n log n)O(log n) 或 O(n)哈希表法统计每个元素的出现次数,找出出现次数最多的元素O(n)O(n)摩尔投票算法遍历数组,使用候选众数和计数器找出众数O(n)O(1)

2024-04-19 09:00:00 848 1

原创 力扣88. 杨辉三角(动态规划,Java/C/Python3实现含注释说明,简单)

给定一个非负整数 numRows,生成杨辉三角的前numRows行。在杨辉三角中,每个数是它正上方两数之和。示例:原题:LeetCode 118我们可以使用二维数组来存储杨辉三角的每一行。对于每一行,我们可以通过上一行的数据计算得出。具体地,除了第一列和最后一列都是1之外,其余位置的值都等于它正上方的两个数之和。C语言版本Python3版本复杂度分析时间复杂度Java版本:O(numRows^2),其中numRows是输入的行数。每一行有i个元素(i从1到numRows),每个元素都需

2024-04-18 23:51:28 1418

原创 力扣322. 零钱兑换(动态规划,Java/C/Python3实现含注释说明,中等)

动态规划是解决这类问题的有效方法,因为它避免了重复计算子问题,从而提高了效率。在记忆化搜索和动态规划之间选择时,如果问题的规模较小或者递归结构清晰,记忆化搜索可能更为直观。然而,对于大规模问题或需要优化的场景,动态规划通常更加高效。无论是记忆化搜索还是动态规划,它们的核心思想都是将原问题分解为子问题,并存储子问题的解以避免重复计算。在实际应用中,根据问题的特点和需求,可以选择合适的方法来解决问题。方法时间复杂度空间复杂度优点缺点记忆化搜索O(m * n)O(n)直观易理解,递归结构清晰。

2024-04-17 08:45:01 996 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除