算法刷题
文章平均质量分 69
墨溱
喜爱,热爱!
展开
-
算法刷题:最小覆盖子串
双指针的初始值都为0定义hash表记录t和窗口中的字母个数定义变量统计t和窗口内的有效字母种类有效字母种类:窗口内hash某个字母的个数大于等于t的hash中的该字母的个数时,为有效定义变量,记录最小子串的初始值和长度。原创 2024-02-21 13:42:52 · 719 阅读 · 3 评论 -
串联所有单词的子串
双指针的初始值与滑动窗口的次数相同每一次滑动窗口都需要不同的hash2,因此定义它的位置需要额外注意创建变量count来记录有效字符串个数。原创 2024-02-20 08:00:00 · 422 阅读 · 1 评论 -
算法刷题:找到字符串中所有的字母异位词
定义两个指针:left和right,初始值都为0创建hash表1,用数组模拟,记录p的每个字母出现的个数创建hash表2,用数组模拟,用来记录子串(窗口)中各个字母出现的个数定义变量count,来记录窗口中的有效字母的个数创建链表来存储满足条件的异位词的下标。原创 2024-02-19 17:34:06 · 1660 阅读 · 2 评论 -
算法刷题:水果成篮
首先,滑动窗口需要两个指针,left和right,都需要对数组进行从左往右的遍历,因此,初始值都为0还需要一个用来记录水果种类的变量,这里可以使用HashMap容器,还可以使用数组来模拟容器,这里我们使用HashMap容器来实现除此之外,我们还需要定义一个变量,用来记录当前子数组的最大长度。原创 2024-02-19 11:37:06 · 729 阅读 · 1 评论 -
算法刷题:最大连续1的个数
int left = 0,right = 0,//两个同向指针n = nums.length,//数组长度zero = 0,//计数器,计算零的个数ret = 0;//返回值,最长的子串的长度。原创 2024-02-18 08:00:00 · 381 阅读 · 0 评论 -
算法刷题:将 x 减到 0 的最小操作数
int left = 0,right = 0,//滑动窗口所需要的两个同向指针n = nums.length,//数组的长度ret = -1,//默认返回值,子数组的最大长度strsum = 0;//子数组的和//数组的和//子数组需要满足的和。原创 2024-02-18 08:00:00 · 472 阅读 · 1 评论 -
算法刷题:无重复字符的最长字串
因为窗口需要两个指针来维护窗口的边界,且两个指针都需要对数组进行从左往右的遍历操作,因此,我们定义left和right两个指针,初始值都为0。原创 2024-02-17 12:17:47 · 437 阅读 · 2 评论 -
算法刷题:长度最小的子数组
如图所示,两个指针都需要从左往右进行遍历,因此初始值都为0除此之外,还需要定义题目所需要的其他变量,如窗口总和sum和窗口总长度len,sum初始值为0,而len的初始值,为了防止比较子数组长度时出错,定义为: Integer.MAX_VALUE。原创 2024-02-17 10:38:07 · 497 阅读 · 1 评论 -
算法刷题:移动零
当nums[cur]!=0时,为了满足上面的三个区域,应该将当前非零值放在非零值区域的最后一个,也就是desc+1处,而且desc+1处的数字正好也是零区域的第一个,所以,将nums[cur]与nums[desc+1]进行交换,然后将cur与desc进行+1操作,这样就又使得数组满足了上面的三个区域的条件。因为desc表示的是非零元素的最后一个数,那么它在一开始是没有非零的数字的,所以这里给它赋值为-1,当nums[cur]==0时,只需要使得cur++,因为这样正好可以使得cur的左边是已校验的零区域。原创 2024-02-10 15:18:51 · 458 阅读 · 2 评论 -
算法刷题:复写零
注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。解释:调用函数后,输入的数组将被修改为:[1,0,0,2,3,0,0,4]dest的初始值为-1,因为它表示复写后的最后一位数的地址。输入:arr = [1,0,2,3,0,4,5,0]cur的初始值为0,因为它需要从零开始遍历数组中的数。输出:[1,0,0,2,3,0,0,4]原创 2024-02-13 09:44:24 · 430 阅读 · 1 评论 -
算法刷题:快乐数
fast这个指针每次进行两次求平方和,而slow则是进行一次求平方和,循环执行该步骤,直到fast与slow相等,则说明已经找到了一个在循环圈里的数。由上面两种结果可以推断出:结果必定会出现死循环,我们只需要找到死循环后进入循环圈中的一个数,判断这个数是否为1,就可以判断出该正整数是否为快乐数.那么问题很明确,我们现在需要做的是,找到那个进入循环圈的数,这里我们使用双指针中的快慢指针来完成。对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。如果这个过程 结果为 1,那么这个数就是快乐数。原创 2024-02-13 16:48:25 · 507 阅读 · 1 评论 -
算法刷题:盛水最多的容器
因此,分析可以得出,固定高度低的一方,遍历的结果都是没有意义的,因此,我们只需要将其跳过就行,当前情况下,我们就可以使用left++,来跳过这个数。期间每次都需要计算当前的容量,直到left与right相遇,找到所有v中的最大值,就是题目的结果。left从左往右对数组进行遍历,right从右往左进行遍历。h为左右两边低的一边,w为左右两边之间的距离。遍历的过程中,每一次都需要记录当前容器的体积。原创 2024-02-13 18:10:33 · 1096 阅读 · 6 评论 -
算法刷题:有效三角形个数
这个时候,right左边的与left相加都会小于最长边,也就不满足构成有效三角形的情况,所以此时的left就已经没有了匹配的价值了,此时需要跳过当前left,即left++,进行下一次判断。个,那么此时与right可以匹配的数已经校验完了,现在只需要将right–,进行下一次校验即可。当nums[left]+nums[right]10。原创 2024-02-15 10:39:11 · 544 阅读 · 3 评论 -
算法刷题:和为s的两个数
这里我们是利用单调性来使用双指针的对撞指针来解决问题。原创 2024-02-15 11:35:51 · 529 阅读 · 3 评论 -
算法刷题:三数之和
因为数组被排序优化了,那么当固定的c是正数的时候,后面的a+b肯定也是大于0的,也就是一定不会出现a+b=-c的情况.这种情况,直接break即可.先给数组进行排序,固定一个数c,然后再找出能够与c相加为0的a+b,即a+b=-c。当找到一个满足的时候,两个指针向中间移动,进行下一轮排查。这道题的解题思路是:三个数:abc。重复的a,b和c,需要进行跳过。而这里的a+b则需要用到。相同的组合不能够同时存在。原创 2024-02-16 10:01:54 · 787 阅读 · 1 评论 -
算法刷题:四数之和
当数据进行加减操作的时候,可能会发生溢出,因此,我们需要在计算a+b=target-d-c;的时候,将数据转换为long。在求a+b+c=target-d的时候,固定c,找到a+b=target-d-c;a+b+c=target的时候固定d,找到a+b+c=target-d。三数之和中,我们固定的是其中一个数,四数之和中,我们则需要固定两个数。题目要求的是a+b+c=target。这道题我们可以参考一下三数之和。然后利用两数之和求解。原创 2024-02-16 10:01:35 · 451 阅读 · 1 评论