- python创建数组
一开始的思路是先二分法找到0,再往两边双指针分开。但多此一举,直接从两边往中间双指针靠拢就行。
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
n = len(nums)
i,j,k = 0,n - 1,n - 1
ans = [-1] * n
while i <= j:
lm = nums[i] ** 2
rm = nums[j] ** 2
if lm > rm:
ans[k] = lm
i += 1
else:
ans[k] = rm
j -= 1
k -= 1
return ans
关键在于 以窗口的结尾位置作为循环标志,确定每个循环里满足条件的最短子数组的长度。
class Solution:
def minSubArrayLen(self, s: int, nums: List[int]) -> int:
res = float("inf") # 定义一个无限大的数
Sum = 0 # 滑动窗口数值之和
i = 0 # 滑动窗口起始位置
for j in range(len(nums)):
Sum += nums[j]
while Sum >= s:
res = min(res, j-i+1)
Sum -= nums[i]
i += 1
return 0 if res == float("inf") else res
“ // ” 表示整数除法,返回整数 比如 6//2 结果为3,7//2结果也是3
“ / ” 表示浮点数除法,返回浮点数 (即小数) 比如 6/2 结果为3.0 ,7/2=3.5
“ %” 表示取余数 比如7%4 结果为3
(7条消息) Python中的for i in range(range()函数的for循环)如何使用,详细介绍_for in range循环_宝藏女孩的成长日记的博客-CSDN博客
注意range中循环变量的范围和顺序
变量count的使用
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
ans = [[0]*n for i in range(n)]
count = 1
for i in range(n//2):
for j in range(i,n-i-1):
ans[i][j] = count
count+=1
for j in range(i,n-i-1):
ans[j][n-i-1]= count
count+=1
for j in range(n-i-1,i,-1):
ans[n-i-1][j] = count
count+=1
for j in range(n-i-1,i,-1):
ans[j][i]=count
count+=1
if n%2 != 0:
ans[n//2][n//2]=n**2
return ans