977.给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
#新数组也要求按非递减顺序排序,那么最大值为nums两端值的平方
class Solution:
def sortedSquares(self, nums: list[int]) -> list[int]:
n = len(nums)-1
l = 0
r = n
result = [0]*(n+1)
for i in range(len(nums)):
#比较nums两端值平方的大小
if nums[l]**2 >= nums[r]**2:
result[n-i] = nums[l]**2
l += 1
else:
result[n-i] = nums[r]**2
r -= 1
return result
#暴力解法(全算出来再去排序)
class Solution:
def sortedSquares(self, nums: list[int]) -> list[int]:
result = [0]*(len(nums))
for i in range(len(nums)):
result[i] = nums[i]**2
return sorted (result)
209.长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0.
#双指针法,先计算第一个指针到什么地方时(即j=?),sum>target,再移动第二个指针,看当前的和,即sum-nums[i],不断对比j-i+1的大小(一定要记得加一),再取符合条件的最小值
class Solution:
def minSubArrayLen(self, target: int, nums: list[int]) -> int:
res = float("inf")
Sum = 0
i = 0
for j in range(len(nums)):
Sum = Sum + nums[j]
while Sum >= target:
res = min(res, j-i+1) #这里记得要+1
Sum = Sum - nums[i]
i +=1
renturn 0 if res == float("inf") else res
59.螺旋矩阵II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
class Solution:
def generateMatrix(self, n: int) -> list[list[int]]:
nums = [[0] * n for _ in range(n)]
startx = 0 #开始的行数
starty = 0 #开始的列数
loop = n // 2 #循环的次数
mid = n // 2 #判断有无中间点
count = 0 #计数
for i in range (loop-1): #开始一圈一圈循环
for j in range (starty,n-i): #j的变化范围为该行列数的取值
nums[startx][j] = count
#从上左到上右,行数不变,为startx,列数变化:starty——n-i,每循环一圈stary+1,i+1
count +=1
for j in range (startx,n-i): #j的变化范围为该列行数的取值
nums[j][n-i] = count
#从右上到右下,列数不变,为n-i,行数变化:startx——n-i,每循环一圈starx+1,i+1
count +=1
for j in range (n-i,starty,-1): #j的变化范围为该行列数的取值
nums[n-i][j] = count
#从下右到下左,行数不变,为n-i,列数变化:starty——n-i逆向,每循环一圈stary+1,i+1
count += 1
for j in range (n-i,startx,-1): #j的变化范围为该列行数的取值
nums[j][starty] = count
#从左下到左上,列数不变,为i,行数变化:startx——n-i逆向,每循环一圈starx+1,i+1
count += 1
startx += 1 #更新起始点
starty += 1
if n % 2 != 0 : # n为奇数时,填充中心点
nums[mid][mid] = count
return nums