算法
文章平均质量分 81
算法内容
你们叫她小龙女么
主要记录学习历程,加油加油加油加油加油
展开
-
链表(4题)
1.画图,直观形象,便于我们理解2.引入虚拟“头”节点便于处理边界情况方便我们对链表操作3.不要吝啬空间,大胆定义变量比如prev cur next,定义好之后把相应节点的指针存进去,然后就可以不用考虑前后顺序,不用担心找不到节点了4.快慢双指针判环,找链表中环的入口,找链表中倒数第n个节点。原创 2024-09-13 23:47:50 · 398 阅读 · 0 评论 -
模拟(5题)
当我们遇到r,o,a,k时,要去查询前一个字母是否有青蛙已经叫了,如果有,将前一个字母对应的值减一,将这个字母对应的值加一,如果没有,那么这个字符串即为非法。题目要求最少,那么我们在记录c时,应该先查看k字母对应的值,如果大于零,说明已经有青蛙叫完一次了,那么我们将k对应的值减一,然后再将c对应的值加一。最后值得注意的是,若numRows为1,循环会陷入死循环,因此我们先要判读一下这种情况。由图我们可以得出,第一行和最后一行的规律相同,中间的几行的规律相同,根据题意,我们从c开始记录青蛙的叫声。原创 2024-08-13 19:52:50 · 503 阅读 · 0 评论 -
二分查找(8题)
- 力扣(LeetCode)public:left = 0;首先先判断空数组的情况数组可以被分成两个区块,这里我们以寻找左端点为例子。数组被分成小于target和大于等于target。当某一个位置小于target时,这段是必定不可能出现左端点的,因此我们left更新时使用left= mid+1来跳出这个位置。而当这个位置大于等于target时,有可能这个位置就是左端点,right更新时使用right = mid来保留这一位置。原创 2024-08-10 15:34:43 · 885 阅读 · 0 评论 -
哈希表(5题)
把异位词字符串排好序之后都是一样的,所以我们把排完以后相同的字符串作为标志,把这些字符串一个个填进去。我们只需要一边判定一边把数组中的内容往里面塞即可。思路同1,一边判断一边把数塞进去。原创 2024-09-04 20:58:23 · 325 阅读 · 0 评论 -
字符串(4题)
然后创建一个整型数组,我们所需数组长度为两个字符串长度之和-1,两个数不同位上相乘的结果可以存在这两个数下标之和对应的数组位置。最后我们处理前导0,由于我们先逆置过了,因此字符串ret末尾的位置是高位,将0去除即可,最后逆置回来。我们将乘出来每一位的数值先保留,等到结束后再相加。这题我们使用无进位相加的方法。先将字符串逆置,方便处理。原创 2024-09-04 18:39:48 · 330 阅读 · 0 评论 -
前缀和(6题)
我们每遍历到一个前缀和sum的时候,只需要加上已经在hash中存储的,即i位置之前的前缀和中,是否有值为sum-k,加上即可,然后再加上本次增添的前缀和。g[i]为后缀积,表示从 size-1 到i+1位置的数组元素和,递推公式为·g[i] = g[i+1] * nums[i+1];f[i]为前缀积,表示从0到i-1位置的数组元素积,递推公式为 f[i] = f[i-1]*nums[i-1];f[i]为前缀和,表示从0到i位置的数组元素和,递推公式为 f[i] = f[i-1]+nums[i];原创 2024-08-05 22:55:46 · 970 阅读 · 0 评论 -
位运算(10题)
结果为 0 1 1 0 1 1,无进位相加就是1 + 0 = 0,1+1 = 0,但是不会向高位进位。例如 1 0 1 1 0 1 ^分别用 &1 来判断两个数最低位是0还是1,对两个数进行比较,然后分别不断右移这两个数。我们先将所有值异或,这个过程会将相同的数都消去,最后得到两个不同的数a,b异或的结果。将要判断的数每次按位与1,若为1则此位为1,然后再右移一位。我们规定从右往左,的位数为第0,1,2,3,4,5.....31位。a,b两个数中,一个数的该位置为1,一个数为0.原创 2024-08-02 23:55:27 · 806 阅读 · 0 评论 -
基础贪心算法集合(更新到20加油站)
贪心的点在于,如果是I,即这个数到下个数要增长,那么我们选取当前最小的那个数,可以使得出现增长的情况数目最多,同样,当我们判断到D,我们选取最大的那个数,可以使得出现减少的情况数目最多。这个数组的作用是记录最大的序列长度,比如说长度为1的序列末位置为2,4无法接在2后面,但是先前已经储存了接在3后面的序列了,就不需要担心序列长度丢失问题。2.n < k 先把数组中全部负数转换成正数,然后再计算k - n的值,如果为偶数,那么取正与取反抵消,如果为奇数,那么我们将最小的那个数取反即可。原创 2024-07-10 23:46:32 · 910 阅读 · 0 评论 -
滑动窗口(8题)
当left到right这段的子数组之和大于等于目标数时,再向后移动时,子数组的长度会更长,因此我们通过将left右移,判断能否减去一些较小的数,使范围内的子数组长度减小,但是仍然大于目标数。我们让left和right从下标为0处出发,让right不断右移,一直让left到right这段的子数组之和大于等于目标数。但也有可能,整个数组加起来都达不到目标数的大小,我们可以事先遍历判断,也可以判断ret是否被赋值过,来进行返回。比如 1 2 3 4 50 ,目标数为40.如例子 2 3 1 2 4 3。原创 2024-07-24 20:37:31 · 436 阅读 · 0 评论 -
基础动态规划算法集合(更新到22.乘积为正整数的最长子数组长度)
这里主要思路还是和19一样,分成* 两种********************但是如果nums[i]为负数,那么乘以一个大数反而变小了,因此需要分成nums[i]大于等于和小于0两种情况,两个dp表一个存最大值一个存最小值public:i原创 2024-07-10 10:35:20 · 1010 阅读 · 0 评论 -
双指针(7题)
我们可以在图中看到,这个过程就是以一个值为起点,向后或者向下进行比较的结果,(最大的组合加粗)但是它只能保证这次比较的结果中它是最大,所以还需要和它之前的小组中最大值值进行比较。因为开始的时候startpos为0,endpos为-1,因此遍历结束时,startpos指向的是真正开始遍历的位置的下标+1.因此startpos--;因为有可能出现最后一位的值为0,但是所剩余的空格只有1,endpos+2后会出现越界,因此我们要进行判断,如果越界那么我们先进行处理。判断函数(i, j,k)原创 2024-07-22 23:32:05 · 796 阅读 · 0 评论
分享