第一章数组part02
977有序数组的平方
题目要点:非递减顺序排序的整数数组nums
python第一种思路(最简单粗暴),直接先平方后排序
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
# 先平方后排序
# 遍历数组进行平方
for i in range(len(nums)):
nums[i] = pow(nums[i],2)
nums.sort()
return nums
第二种思路 使用异向双指针解决排序问题
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
# 先平方后排序
# 使用异向双指针法排序
for i in range(len(nums)):
nums[i] = pow(nums[i],2)
nums.sort()
left, right = 0, len(nums)-1
while left <=right:
if nums[left]<=nums[right]:
right-=1
elif nums[left]>nums[right]:
nums[left],nums[right] = nums[right],nums[left]
left+=1
return nums
第三种思路 依然是异向双指针 但选择重新定义了一个列表
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
# 一边平方一边排序
l, r, i = 0, len(nums)-1,len(nums)-1
# 定义一个和nums一样长度的列表
res = [float('inf')] * len(nums)
while l <= r:
if nums[l]*nums[l] <= nums[r] * nums[r]:
res[i] = nums[r] * nums[r]
i-=1
r-=1
else:
res[i] = nums[l] * nums[l]
i-=1
l+=1
return res
209 长度最小的子数组
这道题用了滑动窗口的思想,我首先试图使用两个指针来做,但感觉并不简练。下面方法更为合理。
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
res = float('inf') # 定义一个无穷大的数字
Sum = 0 # 初始最开始的和
index = 0
for i in range(len(nums)): #注意此处区间为[0,len(nums))
Sum += nums[i] # 先求当前的和
while Sum >= target: # 当和大于目标值时说明
res = min(res, i-index+1)
Sum -=nums[index]
index+=1
return 0 if res == float('inf') else res
59 螺旋矩阵II
拿到这道题很容易完全混乱,最后不知道该咋写的。首先我们观察这道题的逻辑,该循环本质上就是在一个n*n的数组中进行填数,填数规则为从左到右,从上到下,从右到左,从下到上。然后继续沿着这个规则循环。首先我们需要牢记二分法的要点,确定我们的边界条件,即坚持循环不变量。在这里使用左闭右开的边界规则。
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
# 首先需要生成一个空矩阵
matrixA = [None] * n
for i in range(n):
matrixA[i] = [0] * n
sx,sy = 0,0
count = 1 #从1开始计数循环填入数组中
loop, mid = n//2, n//2
for num in range(1,loop+1):
# 从左到右
for i in range(sy, n-num):
matrixA[sx][i] = count
count+=1
# 从上到下
for i in range(sx, n-num):
matrixA[i][n-num] = count
count+=1
# 从右到左
for i in range(n-num, sy, -1):
matrixA[n-num][i] = count
count+=1
# 从下到上
for i in range(n-num, sx, -1):
matrixA[i][sy] = count
count +=1
sx+=1
sy+=1
if n % 2 == 1: matrixA[mid][mid] = count
return matrixA
此处生成空矩阵也可以写为
nums = [[0] * n for _ in range(n)]
总结
待补充