DataWhale九月组队学习之LeetCode4

作业12:

首先获取字符串的长度,使用双指针法,一个指针从头部开始,另一个指针从尾部开始,交换两个指针所指向的字符,移动指针,直到两个指针相遇或者交叉。

创建一个列表,包含所有元音字母的小写和大写形式。将字符串s转换为小写,以便比较。遍历字符串s的每个字符,如果它是元音字母,就将它反转。最后返回反转后的字符串。这个算法的时间复杂度是O(n),其中n是字符串s的长度。这是因为我们只对字符串进行了一次遍历,而且每个字符最多只被处理两次。

这个问题可以使用双指针法来解决,这种方法主要用于在数组中寻找和为特定值的元组。需要对数组进行排序。排序后,遍历数组,对于每一个元素 nums[i],使用两个指针 left 和 right 分别指向 i 的后面和前面。然后,寻找两个指针指向的元素和 nums[i] 相加等于 0 的情况。如果找到,就把这三个元素作为一个有效的三元组。为了避免找到重复的三元组,需要跳过重复的元素。具体来说,如果 nums[i] 和 nums[i+1] 相等,就让 i+1,跳过这个重复的元素。这个算法的时间复杂度是 O(n^2),其中 n 是数组的长度。这是因为需要对数组进行排序,然后遍历数组。虽然在遍历数组的过程中使用了双指针,但是双指针的移动并不依赖于 n 的大小,所以整体的时间复杂度仍然是 O(n^2)。

作业13:

可以通过使用双指针技术来解决,一个指针 i 来遍历整个数组,另一个指针 j 用于记录当前需要插入元素的位置。这个算法的时间复杂度是 O(n),其中 n 是数组的长度。这是因为需要遍历整个数组。空间复杂度是 O(1),因为只使用了两个指针。

这个问题可以通过使用双指针方法解决。可以定义两个指针:一个慢指针和一个快指针。开始时,两个指针都指向数组的第一个元素。快指针用于遍历整个数组,如果快指针指向的元素和前面的元素相同,并且出现的次数超过2次,那么就将快指针向后移动一位。否则,将慢指针向后移动一位,并将快指针指向的元素复制到慢指针指向的位置。这样,慢指针前面的所有元素都是满足条件的,即出现次数不超过2次。最后,返回慢指针的下一个位置,这就是新数组的长度。这个算法的时间复杂度是O(n),其中n是数组的长度。因为需要遍历整个数组。空间复杂度是O(1),因为只使用了常数级别的额外空间。

假设输入的名字是由小写字母组成的字符串。为了解决这个问题,可以使用一个字典来存储每个字符应该出现的次数。对于名字中的每个字符,在字典中增加相应的计数。然后,可以遍历输入的字符串,对每个字符进行检查。如果在字典中对应的计数大于0,那么就减去1,并继续检查下一个字符。如果在字典中对应的计数为0,那么就返回False,因为这意味着输入的字符超过了名字的长度。最后,如果所有的字符都被成功处理,就返回True。这个函数的时间复杂度是O(n),其中n是输入的字符串的长度。这是因为需要遍历输入的字符串的每个字符。空间复杂度也是O(n),因为需要存储每个字符应该出现的次数。

作业14:

这个问题可以通过滑动窗口算法来解决。滑动窗口算法常用于在数组或列表中找到满足特定条件的连续元素。初始化一个滑动窗口,包含数组中的前 k 个元素。计算这个滑动窗口的平均值。将滑动窗口向右滑动一位,即将窗口最左边的元素移出,继续计算新的滑动窗口的平均值。重复步骤3,直到窗口滑到数组的末尾。在所有滑动窗口中找到平均数最大的窗口,返回其平均值。这个算法的时间复杂度是 O(n),其中 n 是数组的长度。因为只遍历数组一次。空间复杂度是 O(1),因为只使用了几个变量来存储信息,没有使用额外的数据结构。

可以使用双指针的方法来解决这个问题。首先,我们初始化两个指针 left 和 right,分别指向数组的第一个元素。然后,遍历数组,如果当前元素大于等于前一个元素,就将 right 向右移动一位,否则将 left 设置为当前位置。在每一次更新 right 的时候,计算当前连续递增子序列的长度,并更新最大长度。最后返回最大长度即可。时间复杂度为 O(n),空间复杂度为 O(1)。

这个问题可以使用滑动窗口的思想来解决。可以先遍历一遍数组,统计出每个位置之前(包括该位置)的0的个数。然后再遍历一遍数组,用一个窗口来记录当前连续1的个数,并不断移动窗口的右边界来扩展窗口。在扩展窗口的过程中,需要注意,如果窗口内翻转0的个数超过了k,就需要移动窗口的左边界来缩小窗口,直到窗口内翻转0的个数不超过k为止。这段代码的时间复杂度是O(n),其中n是数组的长度。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码不跑那我跑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值