- 博客(22)
- 收藏
- 关注
原创 值返回与引用返回(c++)
C++函数返回值与引用返回的区别在于:值返回创建对象副本,调用者获得独立对象;引用返回是对象别名,不创建新对象。安全引用返回的情况包括静态变量、函数参数和成员变量,但禁止返回局部变量、临时对象等。值返回适合计算结果和局部对象,引用返回适合输入参数和链式调用。使用时需注意生命周期和线程安全问题,避免返回无效引用导致未定义行为。
2025-12-17 15:56:33
520
1
原创 关于const应用与const中的c++陷阱
C++中const修饰指针时的关键区别:1. int* const pt表示指针本身不可变(不能改变指向),但可通过指针修改数据;2. const int* pt表示指针指向的数据不可变,但指针本身可以改变指向。实验证明:const int* pt允许修改指针指向,而int* const pt允许修改数据但禁止改变指针指向。多级指针需注意const匹配问题,非const指针不能直接赋值给const指针,否则会破坏const原则导致编译错误。一级指针允许从非const到const的隐式转换
2025-11-24 16:47:46
714
原创 C++入门系列 (初见c++)
本章作为作者学习复习笔记总结 欢迎大家给予建议与指正目录简易的程序(案例来自CPP书籍)C++预处理器和iostream文件 名称空间(对应 using namespace std)使用 using namespace std 使用std::注意⚠️解释"::"意思"<<"与">>"1. 输出流 <<(流插入运算符)2. 输入流 >>(流提取运算符)控制符与换行符控制符endl换行符\n观察上述代码能够发现 其有很多内容是在c语言中未体现出来的 让我们对他进行编译得到:Come up and C++
2025-10-14 16:08:18
547
原创 64.最小路径和
由题意可得本题仍未动态规划的题目 我们观察题干可以知道我们需要找到从左上角到右下角的最短路径 并且只能按照向右走一格或向下走一格来行进 并且在返回值需要包括左上角与右下角的值 我们联想到之前的打家劫舍的类型的题目 我们需要将其转化 针对此题我们需要将最上面与最下面的数值转化 并借助dp来整体转换 转换思路如下(假设为3x3的格子),请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。参照上述我们即可以用打家劫舍的方法做 引出公式。因为路径 1→3→1→1→1 的总和最小。给定一个包含非负整数的。
2025-09-09 18:22:07
240
原创 62. 不同路径
由题意可得此题可以使用递推公式来解答 其原理如图前面的 终点的最多路径由上一步决定 故其为终点上面的点与左边的点 故我们可以直接推导出公式dp[m][n]=dp[m-1][n]+dp[m][n-1]如何初始化:dp[i][0]一定都是1,因为从(0, 0)的位置到(i, 0)的路径只有一条,那么dp[0][j]也同理。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。1. 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右。3. 向下 -> 向右 -> 向下。
2025-09-08 17:23:53
179
原创 740. 删除并获得点数(points数组方法)
即删除nums数组中的a 获得点数并删掉a+1与a-1 结合示例可知删除的a-1与a+1是不会获得点数的 故我们可以根据此思路联想到我们应该采用points数组的思路来解题 故就可以用前篇文章的打家劫舍来去完成这道题。之后,再次删除 3 获得 3 个点数,再次删除 3 获得 3 个点数。删除 3 获得 3 个点数,接着要删除两个 2 和 4。之后,删除 2 获得 2 个点数。总共获得 6 个点数。删除 4 获得 4 个点数,因此 3 也被删除。返回你能通过这些操作获得的最大点数。总共获得 9 个点数。
2025-08-29 08:30:00
188
原创 198. 打家劫舍
每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。即选择的房屋不能相邻 并且要求得到的为最大金额 此题为动态规划的题目 注意此题容易与此前的爬楼梯的题目混淆。思路:为借助循环将上上房屋偷盗金额和本房屋偷盗金额为Fhouse + nums[i]偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。,一夜之内能够偷窃到的最高金额。
2025-08-28 08:00:00
236
原创 746. 使用最小花费爬楼梯(fmin用法)
可以理解成为dp[i]为到此前所需要支付的费用 cost[i]为下一步需要支付的费用 代码巧妙之处在与他无需去单独选择走两格还是走一格 因为借助fmin可以选择两步或一步最小的值 依据最小的值为此处填下可能有些小伙伴难以理解为什么dp[i]可以统一处理一步和两步两种选择 因为dp[i]+cost[i]不仅仅可以有从起点到达第。- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。
2025-08-27 08:00:00
572
原创 1137. 第 N 个泰波那契数+(变量类型的范围)
那我们可以将数组dp定义为38个元素即索引[0,37] 防止由于原先递归公式中dp[n+3]会使其超过int的最大值 故我们可以将其全部改为减 请看下述。T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2。其中最为本质的原因是因为在递归公式的开头dp[n+3] 当n为35时 dp[38]会为一个非常大的数字≈ 3.8e9 超出。以上为本道题目的解题思路 以及作者所遇到的问题 同时小伙伴们在遇到类似的题目需要考虑各个变量类型的范围。
2025-08-26 08:00:00
606
原创 509. 斐波那契数+(索引知识点分析)
dp[n+1]中n+1的问题 作者之前的思考想法有误 即上篇文章中写到的 其实际为什么是n+1而不是n 其中的原因是int i,dp[n+1]实际上为定义dp这个数组的大小并非由于题目的要求的起始点的结果。有题意可得本题目为经典的动态规划问题,观察题目题目已经给出基本的递归公式 仅仅只需要加以分析即可 F(n) = F(n - 1) + F(n - 2),其中 n > 1。F(n) = F(n - 1) + F(n - 2),其中 n > 1。开始,后面的每一项数字都是前面两项数字的和。
2025-08-24 20:06:10
279
原创 力扣70.爬楼梯
摘要:爬楼梯问题要求计算到达n阶楼顶的不同方法(每次可爬1或2阶)。通过分析发现,f(n)=f(n-1)+f(n-2),类似斐波那契数列。C语言解法使用动态规划,初始化dp[1]=1、dp[2]=2,通过循环计算dp[n]=dp[n-1]+dp[n-2]。注意处理n=1和n=2的特殊情况,数组大小设为n+1以包含所有阶梯数。该问题展示了动态规划的典型应用。
2025-08-23 18:37:35
261
1
原创 【无标题】
其中最后一位数字为9的情况下有特殊情况如[9,9,9,9]故对其单独讨论。由题意可知 题目要求在其给定的数组最后一位增加1;你可以假设除了整数 0 之外,这个整数不会以零开头。最高位数字存放在数组的首位, 数组中每个元素只存储。数组所表示的非负整数,在该数的基础上加一。加 1 得到了 9 + 1 = 10。因此,结果应该是 [1,0]。输入数组表示数字 4321。输入数组表示数字 123。1:最后一位数字不为9;输入数组表示数字 9。2:最后一位数字为9;
2025-06-10 10:05:34
270
原创 题目中的差分数组(题目:零数组转换)
差分数组的作用:高效处理数组区间更新操作的数据结构。它通过记录数组中元素的变化量,而不是直接修改原数组,从而实现对数组的批量更新。其核心思想是将对数组的区间操作转化为对差分数组的局部操作,从而显著提高操作的效率。deltaArray[left] += valu 为deltaArray[left] =deltaArray[left] + value。差分数组主要用于需要频繁对数组的某个区间进行批量更新(例如,增加或减少某个值)的场景。:在一个数组中,将某个区间的所有元素都减少一个固定的值。
2025-05-24 15:31:53
1206
原创 Leetcode删除有序数组中的重复项
解题思路:题意可知其目的是将数组中重复的内容删掉并将原nums换成新;同时返回新长度 同时不需要考虑数组中超出新长度后面的元素,故可知无需针对原nums超出新长度的位置进行特殊处理。更大的输入时会引发问题。更好的方法是动态分配内存或使用其他数据结构。// 长度正确的期望答案。如果所有断言都通过,那么您的题解将被。不需要考虑数组中超出新长度后面的元素。,返回删除后数组的新长度。删除重复出现的元素,使每个元素。函数应该返回新的长度。tips:创建新数组时。
2025-05-20 08:30:00
318
原创 Leetcode3024. 三角形类型(c语言)
本文介绍了如何根据三条边的长度判断三角形的类型。首先,如果三条边长度相等,则为等边三角形(equilateral);如果有两条边长度相等,则为等腰三角形(isosceles);如果三条边长度互不相同,则为不等边三角形(scalene)。此外,如果任意两条边之和不大于第三条边,则无法构成三角形,返回“none”。解题思路是通过计算任意两条边的和,并与第三条边进行比较,确保满足三角形的基本条件。代码示例展示了如何通过条件判断来确定三角形的类型,并在不满足条件时返回“none”。
2025-05-19 15:42:55
254
原创 LeetCode颜色分类
tips:当函数的返回类型为void的时候,其函数函数不会向调用者返回任何数据如下。对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。第二个for是用循环和if语句重新排序并将值重新输入进nums中。必须在不使用库内置的 sort 函数的情况下解决这个问题。作者在一开始的写的时候犯了此错误第二个循环被写成如下代码。语句来提前退出函数,但不需要也不能返回一个值。给定一个包含红色、白色和蓝色、共。故在写代码前需要观察函数的返回值。分别表示红色、白色和蓝色。
2025-05-18 08:30:00
312
原创 Leetcode合并两个有序链表(c语言)
可以得到已给的内容是链表的list(作者一开始其实并没有注意到以为如力扣88题一样是int故用strlen来算长度进行循环)运用递归相较于直接运用链表较为简洁 运用递归是需要注意递归的内容是否正确。解题思路:创建虚拟头节点fack并借助current来跟踪新链表的末尾。新链表是通过拼接给定的两个链表的所有节点组成的。比较list1与list2 将较小的位移到新链表中。将两个升序链表合并为一个新的。
2025-05-15 16:51:41
221
原创 Leetcode有效的括号(c语言)
本文介绍了一种判断字符串中括号是否有效的方法。有效字符串要求左括号必须用相同类型的右括号闭合,且闭合顺序正确。代码通过遍历字符串,使用栈结构存储左括号,并在遇到右括号时检查栈顶元素是否匹配。若匹配则弹出栈顶元素,否则返回false。最终,若栈为空则返回true,否则返回false。代码还处理了特殊情况,如字符串以右括号开头时直接返回false。该方法通过switch语句进行类型判断,确保括号类型匹配。
2025-05-13 17:06:37
592
原创 Leetcode9. 回文数用c语言实现
给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
2025-05-12 15:36:39
628
原创 LeetCode 热题100 两数之和
题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。代码框已给:int *twoSum(int *nums, int numsSize, int target, int *returnSize)你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。输入:nums = [2,7,11,15], target = 9。
2025-05-07 17:01:54
213
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅