- 博客(60)
- 收藏
- 关注

原创 指针从初学到运用(包含运用时的各种情况及实现代码)(最全模板、最详细剖解)
指针是计算机内存地址的别名。在C语言中,指针变量用于存储内存地址。指针使得我们能够直接访问和操作内存中的数据。计算机的内存是一系列连续的存储单元,每个单元可以存储一定量的数据。这些存储单元通常以字节(byte)为单位进行寻址,每个字节由8个比特(bit)组成。指针存储的是变量的内存地址。了解内存模型对于深入理解指针至关重要。例如,通过指针,我们可以直接访问内存中的特定位置,这对于进行高效的数据操作非常重要。
2024-08-17 17:09:11
1855

原创 链表完整功能讲解(含各种功能函数代码)(功能代码模板做题快到飞)
数据域(Node->data):存储实际的数据。指针域(Node->next):存储下一个节点的地址。链表中的最后一个节点指向 null (NULL)表示链表的结束。为了使我们使用链表时更加方便,我个人喜欢定义一个头节点,在这个头节点里,第一个data的值是链表中数据储存的个数,地址指向我们储存的第一个结点的数据。链表是环环相扣的,你要一个一个访问,只有访问到前一个链表才可以拿到“钥匙”(也就是下一个链表Node->data的地址)。理论上链表可以不断一个套下一个,可以无限长。int data;
2024-07-26 00:03:08
2208

原创 力扣第二题——两数相加(链表的讲解与运用,含解决链表问题模板)(含思路详解、完整代码与知识点精炼)
链表问题讲解傻瓜模板篇,以题目实战更好理解链表知识。
2024-07-19 13:41:06
4134

原创 力扣简单难度第七题——删除有序数列中的重复项(附知识讲解和知识点)(双指针方法解析)
双指针:双指针是在链表中常用中常用的编程技巧,当我们要删选数据是就可以采取双指针方法。双指针技巧的关键在于合理地移动指针,以及根据问题的特点选择合适的指针移动策略。使用双指针可以减少空间复杂度,提高代码的效率。在实际编程中,双指针技巧经常与数组、链表和字符串等数据结构结合使用,解决各种算法问题。
2024-06-28 16:03:30
1645
1
原创 力扣4. 寻找两个正序数组的中位数
合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5。合并数组 = [1,2,3] ,中位数 2。请你找出并返回这两个正序数组的。的正序(从小到大)数组。算法的时间复杂度应该为。
2024-10-08 15:33:51
307
原创 力扣第六十题——排列序列
预先计算阶乘值以确定每个位置数字的选择范围。使用阶乘值来确定每个位置应该放置哪个数字。使用一个标记数组来跟踪哪些数字已被使用。逐步构建排列,直到所有位置都被填充。
2024-08-17 18:05:48
782
原创 力扣第五十九题——螺旋矩阵II
这段代码通过不断缩小矩阵的边界,并在每轮循环中按照顺时针顺序填充矩阵,最终生成一个按顺时针顺序递增的n阶矩阵。整个算法的时间复杂度为O(n^2),空间复杂度为O(n^2),适用于需要生成螺旋矩阵的场景。
2024-08-15 21:59:27
1164
原创 力扣第五十七题——插入区间
给你一个按照区间起始端点排序的区间列表intervals,其中表示第i个区间的开始和结束,并且intervals按照starti升序排列。同样给定一个区间表示另一个区间的开始和结束。在intervals中插入区间,使得intervals依然按照starti升序排列,且区间之间不重叠(如果有必要的话,可以合并区间)。返回插入之后的intervals。你不需要原地修改intervals。你可以创建一个新数组然后返回它。这是因为新的区间[4,8]与重叠。starti。
2024-08-09 19:02:15
1336
3
原创 力扣第五十六题——合并区间
以数组intervals表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].[[1,5]]区间 [1,4] 和 [4,5] 可被视为重叠区间。
2024-08-07 23:31:31
549
2
原创 力扣第五十五题——跳跃游戏
思路详解一、问题背景跳跃游戏问题要求我们判断一个人是否能从数组的起始位置跳到最后一个位置。在每一步跳中,我们可以跳到下一个数组位置,跳出的距离由当前数组位置的值决定。如果当前数组位置的值为0,那么我们就无法从这个位置跳到下一个位置。二、解题思路动态规划:状态定义:状态转移:结果返回:三、代码详解遍历数组: 遍历数组中的每个元素。 对于每个元素,更新为当前元素与相加的和以及当前元素的较大者。 同时,检查是否大于或等于数组长度减1,如果是,则返回true。 返回结果: 遍历结
2024-08-06 23:59:21
501
原创 力扣第五十三题——最大子数组和
思路详解一、问题背景给定一个整数数组,要求找到数组中的最大子数组和。所谓最大子数组和,是指数组中一个或多个连续元素组成的子数组,其元素之和最大。二、解题思路动态规划:状态定义:状态转移:结果记录:三、代码详解遍历数组: 遍历数组中的每个元素。 对于每个元素,计算两种情况下的子数组和,并取较大者作为新的。 同时更新为和中的较大者。 返回结果: 遍历结束后,中存储的就是数组中的最大子数组和。 返回。 四、总结通过动态规划的思想,我们能够高效地找到数组中的最大子数
2024-08-05 16:44:31
991
1
原创 力扣第五十二题——N皇后II
研究的是如何将n个皇后放置在n × n的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数n,返回不同的解决方案的数量。n = 42如上图所示,4 皇后问题存在两个不同的解法。n = 11。
2024-08-04 22:33:59
806
原创 力扣第五十一题——N皇后
按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数n,返回所有不同的的解决方案。每一种解法包含一个不同的的棋子放置方案,该方案中'Q'和'.'分别代表了皇后和空位。n = 4如上图所示,4 皇后问题存在两个不同的解法。
2024-08-04 22:28:11
1071
原创 力扣第四十八题——旋转图像
给定一个n×n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转 90 度。你必须在旋转图像,这意味着你需要直接修改输入的二维矩阵。使用另一个矩阵来旋转图像。
2024-08-01 15:17:14
732
原创 力扣第四十六题——全排列
思路详解思路详解: 算法设计:函数定义:初始化:回溯算法:撤销操作:返回结果:这个算法的时间复杂度为 O(n!),其中 n 是数组 的长度。这是因为算法需要生成所有 n! 个排列组合,每个排列组合都需要 O(n) 的时间来生成。空间复杂度为 O(n),因为需要一个长度为 n 的输出列表 来存储中间结果。回溯法:递归函数:列表操作:集合操作:函数定义:变量初始化:循环结构:逻辑判断:返回结果:给定一个字符串 ,请实现一个函数 ,该函数返回字符串 中所有子串的出现次数。子串是指字符串中任意连续的
2024-07-31 11:04:55
660
原创 力扣第四十五题——跳跃游戏
给定一个长度为n的整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意i + j < n返回到达的最小跳跃次数。生成的测试用例可以到达。2跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。2nums[n-1]
2024-07-31 10:58:54
313
原创 力扣第四十三题——字符串相乘
给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
2024-07-30 16:42:10
895
原创 力扣第四十四题——通配符匹配
内容介绍给你一个输入字符串 (s) 和一个字符模式 (p) ,请你实现一个支持'?'和'*'匹配规则的通配符匹配:'?'可以匹配任何单个字符。 '*'可以匹配任意字符序列(包括空字符序列)。判定匹配成功的充要条件是:字符模式必须能够完全匹配输入字符串(而不是部分匹配)。示例 1:输入:s = "aa", p = "a"输出:false解释:"a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa", p = "*"输出:true解
2024-07-30 16:41:57
697
原创 力扣第四十二题——接雨水
该算法首先通过两次遍历构建了两个辅助数组leftMax和rightMax,然后在第三次遍历中计算并累加每个位置的水量。最终得到整个直方图容器可以积累的水量。这个算法的时间复杂度为 O(n),空间复杂度也为 O(n)。
2024-07-29 08:10:50
705
原创 力扣第四十一题——缺失的第一个正数
该算法的时间复杂度为 O(n),空间复杂度为 O(1),因为它在原数组上进行操作,没有使用额外的空间。通过巧妙地利用数组的索引和正负数的标记,实现了在 O(n) 时间复杂度内找到第一个缺失的正整数。
2024-07-29 08:07:57
536
原创 力扣第四十题——组合总和II
思路详解代码详解关键步骤解释 初始化:递归函数定义:递归终止条件:剪枝:路径更新:回溯:结果保存:返回结果:回溯算法:剪枝技术:栈与队列:排序数组:状态更新:数组索引操作:递归调用:结果保存:调试语句:返回值:
2024-07-28 14:02:29
439
2
原创 力扣第三十八题——外观数列
计数与说数”问题的定义是:对于给定的整数n,生成第n个“计数与说数”序列的字符串。序列是从"1"开始的,每个后续的序列是通过描述前一个序列的数字来生成的。第1个序列是"1"。第2个序列是"11"(一个1)。第3个序列是"21"(两个1)。第4个序列是"1211"(一个2,一个1)。第5个序列是"111221"(一个1,一个2,两个1)。
2024-07-27 11:41:27
538
原创 力扣第三十七题——解数独
主方法,初始化数据结构并调用DFS方法来填充数独板。dfs:递归方法,用于尝试填充数独板的每个空格。这段代码通过深度优先搜索算法和回溯策略来解决问题。它通过递归地尝试填充每个空格,并在每一步都检查是否违反了数独的规则,从而找到有效的解决方案。通过使用布尔数组来跟踪每个数字的使用情况,代码能够高效地进行检查和回溯。
2024-07-27 11:32:03
1091
原创 力扣第三十六题——有效的数独
方法用于判断一个给定的9x9数独板是否有效。该方法返回一个布尔值,true表示数独板有效,false表示无效。这段代码通过空间换时间的方式,利用三个辅助数组来记录和验证数独板的有效性。它的时间复杂度为O(1),因为不管输入如何,它都只遍历固定的9x9个元素;空间复杂度同样为O(1),因为使用的辅助数组大小是固定的。这种方法简洁高效,非常适合用于数独验证问题。
2024-07-26 13:06:51
760
原创 力扣第三十四题——在排序数组中查找元素的第一个和最后一个位置
这段代码包含两个函数和。是一个改进的二分查找函数,用于查找目标值在数组中的位置,并根据一个布尔参数lower返回目标值的最小或最大索引。函数使用来找到目标值在数组中的第一个和最后一个出现的位置。
2024-07-25 13:43:40
1021
原创 力扣第三十三题——搜索旋转排序数组
search方法实现了一个改进的二分查找算法,适用于经过旋转的有序数组。旋转数组的特点是,数组的一部分是有序的,另一部分也是有序的,但是两部分之间的顺序被打乱了。
2024-07-25 13:39:55
1102
原创 力扣第三十二题——最长有效括号
给你一个只包含'('和')'的字符串,找出最长有效(格式正确且连续)括号子串s = "(()"2最长有效括号子串是 "()"4最长有效括号子串是 "()()"s = ""0'('')'
2024-07-24 12:07:52
1111
2
原创 力扣第三十一题——下一个排列
整数数组的一个就是将其所有成员以序列或线性顺序排列。arr[1,2,3][1,3,2][3,1,2][2,3,1]整数数组的是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。[1,3,2][3,1,2][1,2,3][3,2,1]给你一个整数数组nums,找出nums的下一个排列。必须。
2024-07-24 12:04:25
980
原创 力扣第三十题——串联所有单词的子串
给定一个字符串s和一个字符串数组wordswords中所有字符串。s中的是指一个包含words中所有字符串以任意顺序排列连接起来的子串。"abcdef""abefcd""cdabef""cdefab""efabcd""efcdab""acdbef"words返回所有串联子串在s中的开始索引。你可以以返回答案。[0,9]因为 words.length == 2 同时 words[i].length == 3,连接的子字符串的长度必须为 6。子串 "barfoo" 开始位置是 0。
2024-07-23 14:03:06
854
4
原创 力扣第二十九题——两数相除
给你两个整数,被除数dividend和除数divisor。将两数相除,要求乘法、除法和取余运算。整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345将被截断为8-2.7335将被截断至-2。返回被除数dividend除以除数divisor得到的。假设我们的环境只能存储有符号整数,其数值范围是。本题中,如果商231 − 1,则返回231 − 1;如果商-231,则返回-231。310/3 = 3.33333.. ,向零截断后得到 3。-2。
2024-07-23 14:00:15
886
原创 力扣第二十五题——K个一组反转链表
给你链表的头节点head,每k个节点一组进行翻转,请你返回修改后的链表。k是一个正整数,它的值小于或等于链表的长度。如果节点总数不是k的整数倍,那么请将最后剩余的节点保持原有顺序。你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。你可以设计一个只用O(1)额外内存空间的算法解决此问题吗?
2024-07-22 15:36:50
758
原创 力扣第二十四题——两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
2024-07-22 15:31:17
871
原创 力扣第二十三题——合并k个升序链表
思路详解 边界条件处理:初始化:合并过程:处理剩余节点:返回结果:链表定义:有序链表:合并思路:边界条件:时间复杂度:空间复杂度:稳定性:
2024-07-20 10:49:30
415
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人