毕业论文终于答辩完成喽!忙忙碌碌,又是学雅思又是搞毕设,力扣只开了个头~~~
决定今天开始全力冲雅思和力扣!
记录一下今天的刷题心得
第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开始。