自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 16. 最接近的三数之和

实验加深了对双指针算法的理解,掌握了处理最接近值问题的方法,为类似问题(如四数之和)提供了解决思路。2. 双指针技巧:固定一个数后,使用左右指针向中间遍历,有效减少了不必要的计算。3. 实时更新:维护一个最接近的和变量,在遍历过程中不断比较更新,确保结果最优。解释:与 target 最接近的和是 0(0 + 0 + 0 = 0)。与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。:使用数组的前三个数的和作为初始的最接近和。:计算当前三元组的和,如果这个和等于。的绝对差,更新最接近的和。

2025-03-28 22:05:09 233

原创 15. 三数之和

2. 固定一个元素,使用双指针寻找其他两个元素:遍历数组,对于每个元素nums[i],使用双指针left和right分别指向i+1和数组末尾,寻找满足nums[i] + nums[left] + nums[right] == 0的三元组。1.排序数组:首先对数组进行排序,这样可以方便地使用双指针技术来寻找三元组,并且有助于跳过重复的元素。2. 双指针遍历:固定一个元素后,使用双指针在剩余数组中寻找满足条件的另外两个元素。3. 跳过重复元素:在遍历过程中,如果遇到重复的元素,跳过它们以避免重复的三元组。

2025-03-28 21:59:08 461

原创 3. 无重复字符的最长子串

本次实验通过实现滑动窗口算法,解决了寻找字符串中不含重复字符的最长子串长度的问题。实验过程中,首先明确了滑动窗口的基本思想,即通过动态调整窗口的左右边界来确保窗口内字符的唯一性。具体实现时,利用哈希表记录字符的最后出现位置,从而高效地判断重复字符并调整窗口边界。通过测试用例验证,算法能够正确处理不同场景,如连续重复字符、无重复字符等情况,确保了结果的准确性和高效性。最终,算法的时间复杂度为O(n),空间复杂度为O(1)(固定大小的字符集),满足高效处理的要求。子串 的长度,"pwke" 是一个子序列,

2025-03-28 21:46:12 320

原创 63. 不同路径 II

这段代码通过动态规划求解机器人在有障碍物的 m x n 网格中从左上角到右下角的不同路径数。首先判断起点和终点有无障碍物,若有则直接返回0。对非障碍物位置,若其上方无障碍物,就加上上方位置路径数,若左方无障碍物,也加上左方路径数。最终终点处记录的路径数因之前用负数标记,通过取负号还原为正数并返回,从而得出机器人到达右下角的不同路径数量。1. 向右 -> 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右 -> 向右。返回机器人能够到达右下角的不同路径数量。3x3 网格的正中间有一个障碍物。

2025-03-16 21:53:46 144

原创 62.不同路径

对其余位置,依据状态转移方程 dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 计算路径数,即当前位置路径数为上方和左方位置路径数之和。对于网格中其他非边界位置(即 i > 0 且 j > 0 ),到达该位置的路径数量等于从其上方位置到达的路径数量加上从其左方位置到达的路径数量。来计算每个位置的路径数量。经过上述步骤的计算, dp[n - 1][m - 1] 存储了从左上角到右下角的不同路径数量,最后通过 return dp[n - 1][m - 1];

2025-03-16 21:48:05 568

原创 43. 字符串相乘

例如,计算 12 和 34 相乘, 2 * 4 = 8 , 2 * 3 = 6 , 1 * 4 = 4 , 1 * 3 = 3 ,这些结果会根据它们的位置进行累加。在完成所有位的乘法和累加后,需要处理每一位的进位情况。从结果数组的最后一位开始(最低位),如果当前位的值大于等于 10,则将其除以 10 的商累加到前一位,当前位保留除以 10 的余数。处理完进位后,跳过结果数组前面的 0(但不能跳过唯一的 0),将数组中的每一位数字转换为字符,存储到结果字符串中,并添加字符串结束符 '\0'。

2025-03-10 21:41:13 347

原创 198. 打家劫舍

表示抢劫当前房子(位置 i ),由于不能抢劫相邻的房子,所以此时能抢劫到的最大金额是从再下一个房子(位置 i - 2 )开始继续搜索能得到的最大金额加上当前房子的金额,同样通过递归调用 dfs 函数实现。表示不抢劫当前房子(位置 i ),那么此时能抢劫到的最大金额就是从下一个房子(位置 i - 1 )开始继续搜索能得到的最大金额,通过递归调用 dfs 函数实现。偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。

2025-03-02 21:27:03 361

原创 34. 在排序数组中查找元素的第一个和最后一个位置

在循环中,计算中间位置 mid = left + (right - left) / 2 - 如果 nums[mid] >= target ,说明目标值可能在 [left, mid] 区间内,将右边界 right 更新为 m - 1。这道题要求在非递减顺序排列的整数数组 nums 中找到目标值 target 的起始和结束位置,并且时间复杂度为 O(\log n),可以使用二分查找算法来解决。循环结束后, left 即为第一个大于等于目标值的元素的下标。如果数组中不存在目标值。

2025-03-02 21:20:49 340

原创 12. 整数转罗马数字

实验中,理解并实现特殊减法形式是难点,像4写成IV、9写成IX ,稍有疏忽就会出错。通过定义数组存储罗马数字与对应值,利用循环将输入整数按规则转化为罗马数字。罗马数字是通过添加从最高到最低的小数位值的转换而形成的。3000 = MMM 由于 1000 (M) + 1000 (M) + 1000 (M)700 = DCC 由于 500 (D) + 100 (C) + 100 (C)注意:49 不是 50 (L) 减 1 (I) 因为转换是基于小数位。9 = IX 由于 10 (X) 减 1 (I)

2025-03-02 21:12:08 384

原创 100.相同的树

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。,编写一个函数来检验这两棵树是否相同。给你两棵二叉树的根节点。

2024-12-03 21:36:23 167

原创 二叉树的中序遍历

给定一个二叉树的根节点。

2024-12-03 21:29:01 197

原创 88.合并两个有序数组

注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。,5,6] ,其中斜体加粗标注的为 nums1 中的元素。最终,合并后数组不应由函数返回,而是存储在数组。需要合并 [1,2,3] 和 [2,5,6]。需要合并的数组是 [] 和 [1]。个元素表示应合并的元素,后。需要合并 [1] 和 []。中,使合并后的数组同样按。合并结果是 [1]。合并结果是 [1]。

2024-11-25 20:10:23 206

原创 83.删除排序链表中的重复元素

若不相同,则直接p=p->next;删除所有重复的元素,使每个元素只出现一次。给定一个已排序的链表的头。

2024-11-25 19:29:40 192

原创 67.二进制求和

解题思路:将二进制字符串转为十进制数,然后相加,再转换为二进制字符串,再重新存储到新的数组中。,以二进制字符串的形式返回它们的和。给你两个二进制字符串。

2024-11-18 20:54:48 202

原创 66.加一

分两种情况:第一种情况就是不用进位的,那就从最后一个数字开始判断加一是否等于10,如果不等于10,加一之后直接返回数组即可;若等于10,分两种情况:1.第一个数加一不等于10,后面要进位,加一等于10直接换成0存储即可;2.第一个数加一也要进位,直接新建一个数组,重新存储。你可以假设除了整数 0 之外,这个整数不会以零开头。最高位数字存放在数组的首位, 数组中每个元素只存储。数组所表示的非负整数,在该数的基础上加一。输入数组表示数字 4321。输入数组表示数字 123。输入数组表示数字 9。

2024-11-18 20:12:31 223

原创 121.卖股票的最佳时机

在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回。设计一个算法来计算你所能获取的最大利润。在这种情况下, 没有交易完成, 所以最大利润为 0。买入这只股票,并选择在。

2024-11-11 21:47:36 182

原创 70.爬楼梯

当需要四阶楼梯达到楼顶时,1 阶 + 1 阶 + 1 阶+ 1 阶,1 阶 + 1 阶+2阶,2阶+1 阶 + 1 阶,2阶+2阶,1阶+2阶+1阶,有五种方案,故f(4)=5=f(2)+f(3);依次类推可以得到f(x)=f(x-1)+f(x-2);解题思路:当只需要0阶楼梯达到楼顶时候,从0级到0级仍然可以看做一种方案,f(0)=1;当需要一阶楼梯达到楼顶,从0级到一级,就一阶楼梯,所以只有一种方案,故f(1)=1;1. 1 阶 + 1 阶 + 1 阶。1. 1 阶 + 1 阶。

2024-11-11 21:13:09 137

原创 58.最后一个单词的长度

首先跳过末尾的空格,即当 s[i] 为空格时,向前移动指针 i ,直到 s[i] 不是空格为止。- 找到第一个非空格字符后,开始计数单词的长度。- 当 s[i] 是字母时,增加 length 的值,并向前移动指针 i。- 初始化一个指针 i 指向字符串的最后一个字符位置。- 最后返回 length ,即为最后一个单词的长度。最后一个单词是长度为 6 的“joyboy”。最后一个单词是“World”,长度为 5。最后一个单词是“moon”,长度为 4。

2024-11-03 22:01:18 150

原创 35.搜索插入位置

因为此时 left 指向的位置是目标值应该插入的位置,以保持数组的有序性。- 如果数组中 mid 位置的值大于目标值,则说明目标值在 mid 的左侧,将 right 更新为 mid - 1。- 如果数组中 mid 位置的值小于目标值,则说明目标值在 mid 的右侧,将 left 更新为 mid + 1。初始化两个指针, left 指向数组的第一个元素, right 指向数组的最后一个元素。- 如果数组中 mid 位置的值等于目标值,则直接返回 mid。

2024-11-03 21:57:09 431

原创 线性表实验

单链表算法设计(1)划分链表:将单链表按基准划分。以单链表的首结点值x为基准将该单链表分割为两部分,使所有小于x的结点排在大于或等于x的结点之前。思路:1. 创建两个新的链表,一个用于存储小于基准值 x 的节点,另一个用于存储大于或等于基准值 x 的节点。2. 遍历原始链表:- 如果当前节点的值小于基准值 x ,将其插入到第一个新链表中。- 如果当前节点的值大于或等于基准值 x ,将其插入到第二个新链表中。

2024-10-22 17:15:09 255

原创 21. 合并两个有序链表

1. 初始化一个新的链表头指针(通常称为 dummy 节点)和一个指针(比如 cur ),用于遍历新链表并逐个插入节点。2. 比较两个输入链表的头节点值,将值较小的节点插入到新链表中。然后移动该链表的头指针指向下一个节点。新链表是通过拼接给定的两个链表的所有节点组成的。4. 将非空的那个链表剩余的节点全部插入到新链表中。3. 重复步骤 2,直到两个输入链表中的一个为空。将两个升序链表合并为一个新的。

2024-10-20 21:39:47 278

原创 有效的括号

当我们遇到一个右括号时,我们需要将一个相同类型的左括号闭合。此时,我们可以取出栈顶的左括号并判断它们是否是相同类型的括号。如果不是相同的类型,或者栈中并没有左括号,那么字符串 s 无效,返回 False。当我们遇到一个左括号时,在接续的遍历中,有一个相同类型的右括号将其闭合。在遍历结束后,如果栈中没有左括号,说明我们将字符串 s 中的所有左括号闭合,返回 True,否则返回 False。注意到有效字符串的长度一定为偶数,因此如果字符串的长度为奇数,我们可以直接返回 False,省去后续的遍历判断过程。

2024-10-20 20:42:55 287

原创 数据结构体

创建学生结构体,包含(学号,姓名,性别,年龄,总分),最多可以存放100名学生信息。(b)按照总分从高到低排序,输出;(a)录入10名学生信息,输出;

2024-09-17 23:35:26 202

原创 1.进制输出

学会用二进制和十进制输出并相互转化输出,认识到整型和浮点型的输出与区别,了解到数据的运算以及复合赋值运算的意义及其使用,并认识到逻辑符合非运算符合。在键盘上敲出变量f1,f2并用float型输出及数据运算。在键盘上敲出并声明整型变量,运算乘法及增一运算符使用。在键盘上敲出并声明变量用逻辑运算符及复合赋值运算。在键盘上敲出变量并声明用整型和float型输出。在键盘上输入二进制,并声明变量,转输出十进制。在键盘上打出并声明变量的形式,输出二进制。在键盘上敲出变量并声明赋值及运算。1.3变量的运算及二进制输出。

2024-08-29 13:44:26 259

原创 27. 移除元素

先寻找出数组nums的长度,定义right从0规定下标,对应的元素依次和所的val进行等价对比,规定left和right初始值相同,若不相等则nums【left】=nums【right】且left++;若相等,则不执行上述不相等的要求,但同时right++要实行,而此时left就并未和right同步才能确保把那个数从数组中删除出去。// 它以不等于 val 的值排序。// 长度正确的预期答案。// 排序 nums 的前 k 个元素。元素的顺序可能发生改变。

2024-08-19 12:13:46 553

原创 28. 找出字符串中第一个匹配项的下标

"leeto" 没有在 "leetcode" 中出现,所以返回 -1。字符串的第一个匹配项的下标(下标从 0 开始)。的字符长度,通过设置一个boolean来判断在。第一个匹配项的下标是 0 ,所以返回 0。"sad" 在下标 0 和 6 处匹配。

2024-08-11 18:30:08 158

原创 7.整数反转

过来就超过范围了,只要判断 rest每次更新后除10,然后跟上一次的rest比较一下,如果不相等,就是溢出,即超过范围。题解:每次取末尾数字即依次余10,然后依次×10再相加,但是有些数字可能是合法范围内的数字,然而。如果反转后整数超过 32 位的有符号整数的范围。给你一个 32 位的有符号整数。中的数字部分反转后的结果。

2024-08-11 18:18:58 147

原创 14.最长公共前缀

解题思路:longestCommonPrefix是公共前缀的意思,因为返回的是字符串就要先定义字符串等于数组的第一个变量字符串,然后采用字符串接取的方法,依次将数组里面的字符串变量从头进行对比,得到最长公共前缀即可。编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串。输入不存在公共前缀。

2024-08-04 21:46:50 214

原创 13.罗马数字转整数

解题方法:由于没有特殊的包的方法可以将罗马数字直接转整数,所以选择用switch-case的方法把每个罗马数字对应到阿拉伯数字中,多个罗马数字并列,对应的阿拉伯数字相加即可得到整数的结果。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做。给定一个罗马数字,将其转换成整数。,即为两个并列的 1。

2024-08-04 21:31:37 678

原创 两个数之和

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。整数,并返回它们的数组下标。你可以按任意顺序返回答案。题目:给定一个整数数组。,请你在该数组中找出。

2024-07-28 22:45:23 376

原创 9:回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true;否则,返回 false。解释:从左向右读, 为 -121。从右向左读, 为 121-。因此它不是一个回文数。是指正序(从左向右)和倒序(从右向左)读都是一样的整数。解释:从右向左读, 为 01。因此它不是一个回文数。例如,121 是回文,而 123 不是。输入:x = -121。输入:x = 121。

2024-07-28 22:36:47 132

空空如也

空空如也

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

TA关注的人

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