现在开始刷代码随想录啦,为期三个月,8月20号刷完,在这打卡啦!!!
二分查找
l=0
r=len(nums)-1
while l<=r:
mid=l+(r-l)//2
if nums[mid]<target:
l=mid+1
elif nums[mid]>target:
r=mid-1
else:
return mid
return -1
移除元素
l=0
r=len(nums)-1
flag=0
while l<r:
while nums[r]==val:
r-=1
flag=1
while nums[l]!=val:
l+=1
flag=1
if flag and l<r:
nums[l],nums[r]=nums[r],nums[l]
flag=0
while nums[-1]==val:
nums.pop(-1)
有序数组的平方
res=[]
l=0
r=len(nums)-1
while l<=r:
if pow(nums[l],2)>=pow(nums[r],2):
res.append(pow(nums[l],2))
l+=1
else:
res.append(pow(nums[r],2))
r-=1
return res[::-1]
长度最小的子数组
快慢指针来维持一个满足和大于某个值的最小区间
l,r=0,0
n=len(nums)
g_len=n+1
s=0
while l<n:
while s<target and r<n:
s+=nums[r]
r+=1
if s>=target:
g_len=min(g_len,r-l)
s-=nums[l]
l+=1
if g_len<=n:
return g_len
else:
return 0
螺旋矩阵II
核心是保持循环不变量的原则
这里的loop计算的是循环的次数,offset和start分别是限制每一次循环的上下界。
比如说第一次循环,start为0,offset为1,变量是在【0到n-1】变化的;
第二次循环,start为1,offset为2,变量是在【1到n-2】变化的;
nums=[[0]*n for i in range(n)]
loop=n//2
mid=n//2
start=0
count=1
for offset in range(1,loop+1):
for i in range(start,n-offset):
nums[start][i]=count
count+=1
for i in range(start,n-offset):
nums[i][n-offset]=count
count+=1
for i in range(n-offset,start,-1):
nums[n-offset][i]=count
count+=1
for i in range(n-offset,start,-1):
nums[i][start]=count
count+=1
start+=1
if n%2:
nums[mid][mid]=count
return nums