算法
各种题目及算法分析
蹲家宅宅
大一软件工程学生,通过csdn来记录计算机相关课程中的学习
展开
-
整数反转算法(leetcode第7题)
依次取每位数反转,与最大最小值进行比较。原创 2024-01-25 19:32:24 · 473 阅读 · 0 评论 -
链表存数相加算法(leetcode第2题)
使用头尾链表节点指针,用carry来存储进位值。原创 2024-01-19 20:58:11 · 578 阅读 · 0 评论 -
C语言程序设计期末例题复习
暂时写这么多,后续复习补充。原创 2024-01-09 23:17:23 · 801 阅读 · 0 评论 -
合并两个有序链表算法(leetcode第21题)
判断链表节点指向值大小,小的节点指针后移,进行递归,最终合并完成。,创建新链表,逐个存入新链表。原创 2023-12-21 22:41:57 · 1019 阅读 · 0 评论 -
反转链表算法及优化(leetcode第206题)
prev和curr,分别代表前节点和当前节点,同时使用变量next记录curr->next。不断向后移,让curr指向prev。最终返回prev(此时为尾节点)原创 2023-12-21 21:53:06 · 605 阅读 · 0 评论 -
两数组交集算法(leetcode第349题)
使用hash表,先将nums1记录,再遍历nums2,若有nums2[j]在hash表中被记录过,则说明这是交集,存入返回的数组。先排序,这样如果出现重复,可以筛查出来,保证唯一性。原创 2023-12-18 21:29:44 · 622 阅读 · 0 评论 -
区域和检索算法(leetcode第303题)
为了减少花费的时间,可以直接使用sums得出区域和,故可以用。原创 2023-12-18 20:46:07 · 493 阅读 · 0 评论 -
移动零算法(leetcode第283题)
双指针,分别指向0和非0数,然后分成小段的移位算法,将0移到小段末尾,右指针是从右边起第一个非0数。左指针是从右指针向左的第一个0。原创 2023-12-17 20:20:00 · 471 阅读 · 0 评论 -
丢失的数字算法(leetcode第268题)
标记每个数,之后遍历筛出未被标记的数。,重复的数互相抵消,留下未被抵消的数。原创 2023-12-17 19:21:13 · 491 阅读 · 0 评论 -
插入元素算法
预留多一个空间,插入新元素,进行排序。原创 2023-12-15 17:47:45 · 487 阅读 · 0 评论 -
字符串排序算法
关键在于比较函数cmp的实现,易错点见下注释。将冒泡排序替换为qsort。原创 2023-12-14 23:44:58 · 676 阅读 · 0 评论 -
循环报数算法
1与0标记是否移除,更为易懂。原创 2023-12-14 23:07:13 · 597 阅读 · 0 评论 -
螺旋矩阵算法(leetcode第54题)
边界判断,同时每个for循环要判断是否超范围。原创 2023-12-13 20:02:06 · 450 阅读 · 0 评论 -
螺旋矩阵算法(leetcode第59题)
就移动边界,直到边界相碰。原创 2023-12-13 19:42:14 · 497 阅读 · 0 评论 -
螺旋矩阵算法(leetcode第885题)
将while里的两个for循环分为四个for循环,对于上下左右,直观易懂,但是优化不明显。所以我们可以改变步数与增量来实现循环。对于超范围的坐标进行判断即可。原创 2023-12-13 19:28:17 · 481 阅读 · 0 评论 -
二进制求和算法(leetcode第67题)
【代码】二进制求和算法(leetcode第67题)原创 2023-12-12 20:44:22 · 421 阅读 · 0 评论 -
杨辉三角算法(leetcode第119题)
动态规划,一维数组,后值覆盖前值,从后遍历。原创 2023-12-12 17:15:38 · 413 阅读 · 0 评论 -
验证回文串算法(leetcode第125题)
写两个函数,一个用来过滤无关字符与大小写转换,另一个用来判断回文串。原创 2023-12-12 17:12:24 · 391 阅读 · 0 评论 -
x的平方根算法(leetcode第69题)
后续补充数学方法,读者可先自行思考。二分查找,注意数据大小即可。原创 2023-12-11 22:12:42 · 496 阅读 · 0 评论 -
汇总区间算法(leetcode第228题)
标记高低位,判断高低位是否相同,来判断是否要加"->"格式化存入字符串所在地址(方便整数转字符串)原创 2023-12-11 21:14:28 · 427 阅读 · 0 评论 -
多数元素算法(leetcode第169题)
先排序,再对相邻数进行比较,记录次数,取最大次数的值。以达到更新比较值的目的。原创 2023-12-10 23:48:15 · 468 阅读 · 0 评论 -
固定区间存在重复元素算法(leetcode第219题)
利用滑动窗口,框定一个大小区间(避免重复讨论)同时将i-k到i的窗口不断向右移动。原创 2023-12-09 22:32:43 · 508 阅读 · 0 评论 -
方阵顺时针旋转算法
发现边边角角的值互换,并且自外向内不断缩窄,最终实现顺时针旋转90°。原创 2023-12-08 14:09:51 · 473 阅读 · 0 评论 -
偶数位字符前置算法
,先存入偶数位,后存入奇数位,在数组末尾要加上一个结束符'\0',然后把新的字符串拷贝到原字符串。开辟一个新的数组(要足够大,防止。原创 2023-12-08 13:52:43 · 496 阅读 · 0 评论 -
矩阵基本操作算法
利用上三角遍历,实现矩阵转置相加。原创 2023-12-08 13:37:44 · 1265 阅读 · 0 评论 -
奇数位字符反转算法
一个在前,一个在后,两边互相向中间靠近,交换字符。原创 2023-12-08 13:18:37 · 474 阅读 · 0 评论 -
删除字符串中数字与反转字符串算法
移除字符串中的数字,可以使用ctype.h头文件中的isdigit函数来判断数字,并用双指针来逐渐覆盖原字符串,要注意的是,覆盖完后要在字符串末尾。反转字符串遍历进行字符交换即可,同时注意0的情况。原创 2023-12-08 13:02:17 · 575 阅读 · 0 评论 -
存在重复元素算法(leetcode第217题)
将所有元素进行排序,对相邻元素比较是否相同,找出重复元素。如果数组中每个元素互不相同,返回。如果任一值在数组中出现。创建hash表,利用。原创 2023-12-06 22:26:21 · 534 阅读 · 0 评论 -
只出现一次的数字算法(leetcode第136题)
【代码】只出现一次的数字算法(leetcode第136题)原创 2023-12-05 14:40:26 · 498 阅读 · 0 评论 -
买卖股票的最佳时机算法(leetcode第121题)
【代码】买卖股票的最佳时机算法(leetcode第121题)原创 2023-12-05 12:50:23 · 443 阅读 · 0 评论 -
进位算法(leetcode第66题)
原解答链接:https://leetcode.cn/problems/plus-one/你可以假设除了整数 0 之外,这个整数不会以零开头。最高位数字存放在数组的首位, 数组中每个元素只存储。数组所表示的非负整数,在该数的基础上加一。输入数组表示数字 4321。输入数组表示数字 123。用jw来记录最高位的状态。原创 2023-12-04 20:40:08 · 526 阅读 · 0 评论 -
寻找两个有序数组的中位数算法(leetcode第4题)
给定两个大小分别为 和 的正序(从小到大)数组 和 。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 。示例 1:输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2:输入:nums1 = [1,2], nums2 = [3,4]输出:2.50000解释:合并数组 = [1,2,3,4] ,中位数 (2 + 3) / 2 = 2.5算法:中位数定义代码实现:算法:排原创 2023-12-04 20:16:46 · 423 阅读 · 0 评论 -
罗马数字转整数算法(leetcode第13题)
数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做。XIV 可视作 X−I+V=10−1+5=14。给定一个罗马数字,将其转换成整数。,即为两个并列的 1。原创 2023-12-02 11:21:34 · 473 阅读 · 0 评论 -
整数转罗马数字算法(leetcode第12题)
数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为。这样可以不断将num降级(数量级),最终降到个位,每次减1,最终减为0,字符串完成。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做。每次循环减去num能包含的最大单位,并在roman字符串末尾添加该单位。来表示每个计量单位对应的罗马数字(从大到小排序),即为两个并列的 1。给你一个整数,将其转为罗马数字。例如, 罗马数字 2 写做。原创 2023-12-02 10:57:21 · 471 阅读 · 0 评论 -
硬币堆算法分析
我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有硬币的最少次数。堆硬币,每堆的数量保存在数组。0<= coins长度<=10。拿完所有硬币最少操作次数。解释:最少需要拿4次硬币。解释:最少需要拿8次硬币。第一行输入硬币数组长度。原创 2023-12-01 19:49:35 · 519 阅读 · 0 评论 -
字符串元素间最短距离算法分析
从0开始遍历下标,分别向右和向左寻找flag数组为1的位置(表示字符ch的位置),再将两个距离比较,取更小的位置。ps: 若字符串s为空,应输出距离0。使用flag数组标记字符ch的位置。保证字符c出现在字符串s中。0原创 2023-12-01 18:53:45 · 406 阅读 · 0 评论 -
降序子数组最大和算法分析
已知子数组[numsl,numsl+1,...,numsr−1,numsr],若对所有。解释:[50] 是元素和最大的降序子数组,最大元素和为 50。子数组的最大可能元素和。子数组是数组中的一个连续数字序列。),numsi>numsi+1都成立,则称这一子数组为。第二个输入数组元素:1, 2, 3, ... (n个)给你一个正整数组成的数组。第一行输入数组长度 n。原创 2023-12-01 18:45:00 · 525 阅读 · 0 评论 -
分割平衡字符串算法分析
【代码】分割平衡字符串算法分析。原创 2023-11-29 22:07:30 · 342 阅读 · 0 评论 -
最大单词数算法分析
最大单词数算法原创 2023-11-27 23:04:16 · 433 阅读 · 0 评论 -
关于数字反转的思考
新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例 2)。主要原理是利用循环次数,减少多余的计数变量cnt,每次循环都会乘上十倍,最终达到输出值也是相同位数,当然这也可以避免首位为0以及负数的问题,具体为什么,自己想想。要注意的是,一旦首位判断不为0,或者0之后出现非0数后,之后的0都要打印出来,而在这之前的0则不能打印出来。这种取余然后打印的方法是最直接的,但是也是不适用的,因为这无法处理负数情况,也无法处理首位为0的情况。一个整数,表示反转后的新数。原创 2023-11-07 22:13:45 · 74 阅读 · 0 评论