时隔一个月又来刷代码随想录了~

毕业论文终于答辩完成喽!忙忙碌碌,又是学雅思又是搞毕设,力扣只开了个头~~~

决定今天开始全力冲雅思和力扣!

记录一下今天的刷题心得

第27题,移除数组的元素

我的代码

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        i=0
        j=len(nums)
        while i < j:
            if nums[i]==val:
                nums.pop(i)
                j-=1
            else:
                i+=1
        return len(nums)

 其实感觉自己的方法也还好,不过代码随想录里介绍的快慢指针方法也很有启发

第977题,有序数组的平方

我的代码,非常简单,依赖于sorted函数

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        for i in range(len(nums)):
            nums[i] = nums[i]**2
        return sorted(nums,reverse=False)

代码随想录里介绍的双指针方法非常有启发!

第209题,长度最小的子数组,有点难度

我的代码,虽然能运行,但是貌似太笨了,有些测试案例力扣显示超时了

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        lgn=1
        while lgn <= len(nums):
            for i in range(len(nums)-lgn+1):
                lst=[nums[i]]
                if sum(lst)>=target:
                    return len(lst)
                j=i
                while len(lst)<lgn:
                    j+=1
                    lst.append(nums[j])
                    if sum(lst)>=target:
                        return len(lst)
            lgn+=1
        if lgn==len(nums)+1:
            return 0

还是借鉴随想录的“滑动窗口方法”,这个相当于两个指针,在循环中要遍历所有和大于等于target的数组,然后记录最短长度,更新最短长度即可。如果子数组的和大于等于target,则缩小窗口,否则扩大窗口。

还需要注意滑动窗口方法while循环的条件是

while right < l

 因为l=len(nums),如果l=10,right最大只能取到9,因为索引从0开始。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值