- 博客(23)
- 收藏
- 关注
原创 9.18顺序表的编写
5.SequentialListInsert()用来向顺序表插入元素的函数,传入参数分别为结构体list的指针(这里我不认为list为顺序表而是包含含顺序表的一个变量),还有要插入的索引的位置,还有元素,然后判断传入的索引值是否有效,还要判断当前顺序表是否满,如果满了就双倍扩容,注意这里用realloc扩容后会保留原来数据,可能地址会变所以用newElement接受了一下,然后让顺序表指针指向他完成扩容,接着就是插入元素了,从后往前遍历,然后这里有一个关于约不越界的问题 (由于循环是从。
2024-09-18 20:19:17
372
1
原创 9.15力扣练习
/然后用两个循环来填充L,R,数组的值L[0]是1,这样L[i]=L[i-1]*nums[i-1],而对应右数组,因为是从右往左变量R[i]=R[i+1]*nums[i+1]//这里还有第二种方法左右乘积列表,先初始化两个空数组,L和RL[i]表示的是i左侧所有数字的乘积,而R[i]表示的是i右侧所有数字的乘积。//最后一个循环用来求除自己以外的所有数组的乘积,就是除自己外的左乘积或者右乘积(这里注意的是数组L[0]和数组R[0]计算的是。//nums 0-L-1的乘积。//翻转回到对应位置。
2024-09-16 14:48:41
242
原创 9.13力扣练习
建立一个二维数组,定义i,用做遍历数组,flag转向。//将s转换成字符数组,开始遍历里面的字符,如果i == 0 || i == numRows -1,flag的符号将被反转,首先定义flag为-1,i==0,变为。//对sum进行%2,如果是1,0,则返回原值,如果位2则要进位,原值变成零,然后对carry进行赋值,如果要进位,赋值为1则下一个sum就会加上1。//1,开始累加这里遍历的是行,当遍历到底部又lag反转,此时往回的列遍历,同时往每一行尾插字符,这样就完成z字排列,然后在定义一个。
2024-09-13 19:49:54
420
原创 9.13力扣练习
将字符串转换为字符数组,先枚举子串长度,再枚举左边界这样就可以得出右边界,如果越界就可以退出循环,如果左边界与右边界不相等,给当前dp数组赋值flase,否则就可由动态转移方程dp[i][j]也是true, // 只要 dp[i][L] == true 成立,就表示子串 s[i..L] 是回文,此时记录回文长度和起始位置,最后用substring根据起始点和长度截取最长字符子串。
2024-09-13 00:34:13
333
原创 9.11力扣练习
/遍历 nums2,对于 nums2 中的每个元素,检查它是否存在于 set1 中。如果存在,说明这个元素是 nums1 和 nums2 的交集的一部分,因此将其添加到 resSet 中。//各个字符出现的次数,然后再遍历下一个字符串减去出现的次数,最终如果record里面的值都为0.则为异位词。//遍历 nums1,将其中的每个元素添加到 set1 中。//其中比较要注意的是这个哈希集合转换成整型数组,这里采用的操作是定义一个数组,然后遍历哈希表,将表内数据都取到数组里面,最后返回数组。
2024-09-12 00:36:19
338
原创 9.7.c2级刷题笔记
这差不多是对数组操作的进阶,将数组的前m个元素移到数组后面,首先for循环确定要往前移几次每次在移动之前记录第一个字符,因为每次往前移第一个字符都会被覆盖,所以,往前移动m个就相当于记录了m个字符,然后就是对字符w的前移操作, for(j=1;j++){w[j-1=w[j]},从第二个字符覆盖第一个字符开始往前移一位,然后 w[j-1]=t,将第一个字符放到最后一个字符当中,依次类推,每次往前移之前记录第一个字符,移动后在把字符放到最后,移动了m位,就放了m个,从而完成了操作。
2024-09-07 15:15:00
319
原创 9.4力扣练习
/这里来说一下递归顺序,先往inorder传根节点和链表res,然后一直递推根节点的左子叶直到为空开始返回,既然root为空则返回上一个函数即root.left=下一个函数的left。,然后把值加入res,紧接着把root带入下一个递归,则root.right也为0,返回上一个函数该函数已经执行完代码返回上一个函数,root节点也变成上一个,将其放入数组后继续执行代码,进行左子树的递归当前root.left不为空继续进行右子树递归为null返回。
2024-09-05 00:36:52
307
原创 9.3力扣练习
/此题使用动态规划,因为不同的数字有不同的解码,当一些数字可以被解码成两种情况,第一种情况为解码成A~I的某个字符,我们要算f[i]的个数时,我们要知道f[i-1]的个数(初始f[0]=1),第二种情况为使用了两个字符来编码即当前面一个字符不为0,且前面字符转换成数字*10+后面字符转换成数字<26,这样看剩余前i-2个字符的次数就为 f[i-2],动态转移方程就可以写成 f[i] += f[i - 2];返回f[n]就是解码次数(此题解释十分潦草没有深刻理解动态规划,等后面再来解释)
2024-09-03 23:54:49
198
原创 9.3号力扣练习
/此题最好理解可以使用动态规划,因为某次爬楼题可以爬两阶,也可以爬一阶,设爬楼梯总数为发f(x)所以爬楼的总数为f(x-1)+f(x-2),当要爬到台阶1的时候,只有一种方法,否则就返回刚才的动态转移方程f(x-1)+f(x-2),当然还可以用模拟,及滚动数组含义和动态规划一样,设总方法为r,而前面是两部之前的方法总数,和一步之前的方法总数,所以就有了 r = p + q;,然后数组往前移,将原本值替换成后面的,依次类推。
2024-09-03 00:09:46
216
原创 9.1力扣练习
/此方法是用for循环从后往前遍历,令数组的最后一位加一,并%10,一种情况如果该数小于10则返回本值,另一种情况则是数组最后一位加一为10,此时%10的结果则为0,就不满足继续循环(因为不满足这个判断的原因为该数为10)每次循环后就往前遍历然后加一(这里加一是因为前面%10得到0该往前进一位),当循环结束没有触发判断条件是因为出现都为9的数组,则需要进行扩容再把数组第一个索引的值为1,最后返回数组。//然后再用二分法取0~x中间值,直到满足条件,具体情况看代码。
2024-09-01 23:11:11
240
原创 8.30力扣练习
/反向遍历,先求出字符串的最大下标,从最大下标开始遍历,找到单词的最后一个字母( while (s.charAt(index) == ' ')index--) ,然后从这个最后一个字母开始往前遍历,直到遇到空格,这里wordlength记录单词长度遍历每个字符,只要不是空格就加1index--;
2024-08-30 22:35:19
281
原创 8.29力扣练习
/方法是通过两个循环来暴力匹配,就是搜素在haystac中与needle等长的字符串,先是一个循环用来遍历haystack中的字符,在定义一个布尔值来判断有没有满足条件的,然后遍历needle字符串与haystack中等长的字符串相比较(这里的haystack中等长的字符为haystack.charAt(i + j),这个i+j的值表示字符串不断往后移),只要一个不匹配布尔值为假返回-1,否则返回对应字符串haystack中满足条件的第一个索引值。
2024-08-29 21:32:10
237
原创 8.27力扣练习
/本题用递归首先确认中止条件,如果链表中只有一个或者没有节点,此时结束递归,否则进入递归,当递归结束时,也就是newHead.next作为传参带入到函数为空时,返回递归结果,此时是因为前面为空返回的是不为空的传参入函数的头节点,此时比这一层更上一层的递归的头节点的下一个节点就为他下一层递归的头节点,再将此时的新头节点也就是原来头节点的下一个节点指向头节点完成交换,这也是回归的过程。//双指针题,如果数组长度为0,前k个元素为0,然后定义两个指针,快指针循环遍历数组,当nums[fast]!
2024-08-27 22:40:36
219
2
原创 数组的增删操作
这里写一下数组的增加操作,定义并赋值一个静态数组,如果在某个索引上添加一个值,就用for循环从后往前遍历, 用arr[i]=arr[i-1],将当前的元素替换成其前面一个元素,注意数组里面不能用i+1否则会越界,且设置最后一个值为0,这样0这个位置就会被真正的最后一个数替换,接着只要给目标索引赋值即可。这里写一下数组的删除操作,删除给定索引的元素,操作就是将后一个元素赋值给前一个元素像arr[i]=arr[i+1];
2024-08-27 16:45:56
213
原创 8.26力扣练习
/先判断字符的长度,如果长度为奇数,则不为有效括号,将括号的各种左右两边存入哈希表pairs,再定义一个队列,遍历给定字符串,判断映射 pairs 中是否存在键为 ch 的条目,如果有则进入下一个判断(注意这里如果判断符号为右括号则会进入下一个判断,所以说stack存的全是右括号),判断队列是否为空或者队列stact的队顶是否与pairs里面以ch为键值的字符相等(而ch为键值的字符全是左括号),如果不相等直接返回false,否则将队顶元素剔除,,如果不存在该键值则将该字符插入队顶。
2024-08-26 20:49:09
314
3
原创 8.23力扣题解
这个题先定义一个虚拟头节点,虚拟节点的下一个节点指向头节点,定义两个快慢指针指向虚拟头节点,将快指针先单独移n个节点,然后快慢指针一起往下遍历,直到快指针为空,停止遍历,这时slow与fast间隔n个节点,又因为fast节点为最后节点的后一个,所以slow就在倒数第n个位置,但是我们要删除倒数第个n节点,所以在第一次移动fast的时候,要将他在往后移一位,此时slow就在n-1的位置最后用slow->next = slow->next->next;
2024-08-23 17:11:15
406
原创 8.22力扣题解
/先定义一个哈希表键为字符串,值为整型,用for循环遍历,这时候就用到了滑动窗口,如果dic里的子字符串没有发现与s字符串里的字符相等的,直接将这个字符和下标放入dic里面,如果有相等则将子字符串左端点向右移(这里向右移的方式是直接将s里第一次字符串的下标赋值给i,第二次字符才是相等的,而且方便算长度),最后算最长长度。首先定义一个二维数组,然后对原数组进行排序,然后遍历数组,如果第一个是正数(最小的数),那直接返回result也就是null。
2024-08-22 23:26:37
356
原创 day1part01 数组一
27移除元素 1双指针 1定义两个指针,都赋值给0,快指针遍历数组找到不等于目标值的数,将其赋值给慢指针慢指针slow++,如此slowIndx便是移除后的长度 2暴力方法 1因为不用考虑顺序,直接遍历数组,如果找到需要移除的元素,就将目标值后的所有元素向前覆盖,这样就可以把目标值元素删除不要忘记i--,size--,但是要双循环
2024-07-02 20:02:08
560
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅