977.有序数组的平方
初始想法:
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
new_nums=[]
for i in range(len(nums)):
new_nums.append(nums[i]**2)
new_nums.sort()
return new_nums
#可AC
双指针思想
#伪代码
最大元素一定是在两边,存在负数
步骤
#定义一个新的数组来装元素
vector<int> result
k=numsize-1
for(i=0,j=numsize-1;i<=j#这里要有等号; ){
if(nums[i]^2>nums[j]^2)
result[k]=nums[i]^2
k--;
i++;
else{
result[k]=nums[j]^2}
k--;
j--;
}
return result;
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
#双指针法
#new_nums这里不能用new_nums=nums来定义,不然在new_nums内元素进行平方的时候,nums内的元素也在进行平方操作
new_nums=[0 for _ in range(len(nums))]
k=len(nums)-1
i=0
j=len(nums)-1
while(i<=j):
if(nums[i]**2<nums[j]**2):
new_nums[k]=nums[j]**2
k=k-1
j=j-1
else:
new_nums[k]=nums[i]**2
k=k-1
i=i+1
return new_nums
需要特别注意的是,#new_nums这里不能用new_nums=nums来定义,不然在new_nums内元素进行平方的时候,nums内的元素也在进行平方操作
209.长度最小的子数组
#伪代码
滑动窗口 双指针
暴力解法 两层for循环
滑动窗口是用一个for循环来做两层for循环做的事情
j#这里的j表示终止位置,起始位置如何确定 是关键问题
i=0#i是起始位置
result=max
for(j=0;j<=numsize;j++){
sum+=nums[j];
while(sum>=s){
subl=j-i+1;
result=min(result,subl)
sum=sum-nums[i];
i++;}
}
return result;
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
#滑动窗口,终止位置不断往后,起始位置如何移动是关键
j,sum=0,0
result=float("inf")
for i in range(len(nums)):
sum=sum+nums[i]
while(sum>=target):
length=i-j+1
result=min(result,length)
sum=sum-nums[j]
j=j+1
return 0 if result==float("inf") else result
59.螺旋矩阵II
#伪代码
转几圈 n/2
startx=0,starty=0
offset=1
count=1
while(n/2){
for(j=starty;j<n-offset;j++)
nums[startx][j]=count++;
#下一条边
for(i=startx;i<n-offset;i++)
nums[i][j]=count++;
for(;j>starty;j--)
nums[i][j]=count++;
for(;i>startx;i--)
nums[i][j]=count++
startx++;
starty++
offset++;
}
if(n%2==1):
nums[i][j]=count;
#每条边的处理规则要统一
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
startx=0
starty=0
i=0
count=1
nums=[[0]*n for _ in range(n)]
for offset in range(1,n//2 + 1):
for j in range(starty,n-offset):
nums[startx][j]=count
count=count+1
for i in range(startx,n-offset):
nums[i][n-offset]=count
count+=1
for j in range(n-offset,starty,-1):
nums[n-offset][j]=count
count+=1
for i in range(n-offset,startx,-1):
nums[i][startx]=count
count+=1
startx+=1
starty+=1
if(n%2==1):
nums[n//2][n//2]=count
return nums