自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode-2379. 得到 K 个黑块的最少涂色次数-1652. 拆炸弹-1052. 爱生气的书店老板-2841. 几乎唯一子数组的最大和-2461. 长度为 K 子数组中最大和

思路:基本上就是简单的滑动窗口,只是要记录一个map映射,用来保存当前窗口内有多少对不同的map映射,用来和m进行比较,只有当map映射数满足大于等于m时,采取尝试更新最终的maxSum。那么,要保证有一个长度为k的全为‘B’的字符串,就只需要把对应map中,键‘W’全改为‘B’即可。但是官方题解给出了一种更好的方式来求解,即将原来的code数组,扩容成原来的两倍,并且将code数组原来的数据直接赋值给后面一半,这样当访问数组第i+k个元素时,就不存在越界问题了。之后的操作就是普通的滑动窗口了。

2024-10-02 15:58:34 43

原创 LeetCode---1456. 定长子串中元音的最大数目---643. 子数组最大平均数 I---1343. 大小为 K 且平均值大于等于阈值的子数组数目---2090. 半径为 k 的子数组平均值

思想:维护一个长度为k的定长滑动窗口,每次对窗口执行后移操作,要检查移除窗口的元素是否为元音字母,以及加入窗口的元素是否为元音字母,然后更新当前窗口中的元音字母数量YUAN。之后检查YUAN与最终返回的maxYUAN的关系并赋值即可。空间:O(1)-只维护一个窗口右指针,无额外开销。时间:O(n)-对数组进行遍历操作。思路:基本与上一题一致。

2024-10-01 23:47:41 48

原创 LeetCode---53.最大子数组的和

申请一个dp数组,dp[i]代表数组第i个位置的最大子数组的和,初始化dp[0] = nums[0],那么dp[1]就等于max(dp[0]+nums[1],nums[1]),由此可以推得状态方程为: dp[i] = max(dp[i-1]+nums[i],nums[i])。直接使用一个currentS来记录当前子数组的和,而每次都记录当前位置的子数组最大和,递推表达式为 currentS = max(nums[i], currentS + nums[i])。空间复杂度:O(n),dp数组所需花费。

2024-09-30 09:39:50 128

原创 LeetCode---76.最小覆盖子串

第二步:开始不断尝试收缩左边界,看是否影响windowCount包含整个子串,如果不影响则继续收缩,影响就先停止收缩。然后通过左移r,来使windowCount重新包含整个子串,重复该过程,直至完全收缩。在每次重新包含整个子串时都要对最小长度进行更新,并且记录该子串的起始位置。分别定义两个map。第一个map记为tCount,用于保存子串t的映射;第二个map记为windowCount用于保存当前窗口内的字符映射。初始化双指针l,r分别为0,用于记录当前窗口边界。O(m),保存子串t的哈希映射。

2024-09-29 09:13:49 144

原创 LeetCode---239.滑动窗口的最大值

思想:使用单调栈+滑动窗口的方式,首先先初始化一个单调递增栈这个单调递增栈的大小为k,这样可以第一个窗口中的最大值,会位于当前单调递增栈的栈顶,可以直接记录进入最终返回的vector,然后开始进行滑动窗口,设置l,r两个变量记录窗口的左右边界,分别初始化为0和k-1。申请一个双端队列,用于维护当前窗口,每次加入一个窗口元素时,都先去除掉队列中小于当前插入元素的元素,这样能够维护队列的单调性,保证最大元素一直在队头,当循环变量i到达k-1之后,每一次都需要对最终的返回vector进行插入双端队列的队头元素。

2024-09-28 20:24:39 175

原创 LeetCode---438.找到字符串中所有字母异位词---560.和为k的子数组

通过前缀和的概念,我们能够在一次遍历中有效地计算出和为 kk 的子数组数量。哈希表用于存储每个前缀和的出现次数,使得我们能够快速查找并更新结果。这个方法的高效性在于它避免了使用双重循环的 O(n2)O(n2) 复杂度,将其降低到 O(n)O(n)。public:// 处理和为 k 的情况// 更新当前前缀和// 检查是否存在前缀和为 currentSum - k 的情况// 更新当前前缀和的计数return ans;

2024-09-26 09:40:59 801

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

思路:使用滑动窗口的写法来写,设置一个map来存储当前窗口中已经出现的字符以及其对应的映射,初始窗口起点和最大长度均为0,然后外层循环中不断推进窗口的右端点,并且逐一更新窗口的最大值和当前存储map映射。如果在推进窗口右端点的时候,遇到重复的字符,则直接将窗口的左端点移到重复字符的下一个字符处,重新开始计算窗口。时间复杂度:O(n) (一开始以为是O(nlogn),然后突然意识到map是基于hash的,所以查找的时间复杂度应该是O(1),所以时间复杂度是O(1))

2024-09-25 19:52:40 194

原创 LeetCode---42.接雨水

如果 height[i]>height[top],则得到一个可以接雨水的区域,该区域的宽度是 i−left−1,高度是 min(height[left],height[i])−height[top],根据宽度和高度即可计算得到该区域能接的雨水量。显然这种方式的复杂度是O(N)。思想:由于要得到能接的雨水总量,一定是每一个bar位置所能接的雨水的总和,而对于每一个bar而言,其能接水的量无非就是该bar左右两边的bar的最小值减去当前bar的高度,决定了这个bar的位置能接多少水。

2024-09-24 09:58:58 371

原创 LeetCode---11.盛最多水的容器---15.三数之和

思路:先将数组进行排序之后,循环遍历数组,设置左右指针,左指针设置为当前i位置的下一个位置,设置右指针为数组的最后一个位置。开始内层循环,当三个指针的和sum为0时,保存进最终的ans数组,并且继续增大l,减小r,看是否有其他组数据能和当前i组成的和为0。为了避免重复保存,应该分别在i,l,r对应位置的元素与上一个位置的元素相同时,执行跳过操作。由于短板效应,每次测试完当前情况下的面积后,就将l,r所指向的两个板中较短的那一个板向内移动,因为只有这样,才最有可能使得下一次所盛放的水的比上一次的多。

2024-09-23 16:22:28 205

原创 Leetcode---128最长连续序列---283移动零

使用快慢指针的思想,遇到非零则快慢指针同时向后,遇到零快指针(i)向后。时间:O(nlogn)128-最长连续序列。

2024-09-22 10:06:48 112

原创 PAT --- B1035 --- 插入与归并

不知道为什么这里会出现段错误,没看出什么地方发生地址越界了。

2024-09-04 09:49:07 177

原创 算法学习---字符串相关

二者的结果都会返回一个对应的布尔值。2) 链接 str1 = str1 + str2 或者 str1 = str2 + str1。2) 含空格输入 --- 使用cin.getline(数组名,数组长度)的方式进行按行输入。3) 判等与判断大小 str1 == str2 str1>str2。1) length()或者size()---返回字符串的长度。3)strcat---将一个字符串追加到另一个字符串的末尾。2)strcpy --- 将一个字符串复制到另一个字符串。

2024-05-09 16:12:58 548 1

空空如也

空空如也

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

TA关注的人

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