有序数组的平方
题目简述
给你一个按 非递减顺序 排序的整数数组 nums(,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
我的题解(暴力排序)
每个数平方后,调用sort()
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
res = []
for i in nums:
i = i**2
res.append(i)
res.sort()
return res
双指针法
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
n = len(nums)
i,j,k = 0,n-1,n-1
res = [0] * n #初始化列表
while i <= j:
if (nums[i]**2) > (nums[j]**2):
res[k] = nums[i]**2
i += 1
else:
res[k] = nums[j]**2
j -= 1
k -= 1
return res
== 注 ==
双指针时间复杂度o(n)
209、长度最小的子数组
题目简述
给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
思路循环窗口法
i,j初试为0
一个for循环表示滑动窗口的终止位置j
起始位置移动规则
若sum >= target,则i向后移
== 代码说明==
定义无穷大的数,用于比较得到最小值(float(“inf”))
== 图解 ==
题解
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
i = 0
sum = 0
res = float("inf") #定义一个无穷大的数
for j in range(len(nums)):
sum += nums[j]
while sum >= target:
res = min(res,j-i+1) #子序列长度
sum -= nums[i]
i += 1
if res == float("inf"):
return 0
else:
return res
#时间复杂度o(n)
类似题目
- 904.水果成篮
- 76.最小覆盖子串
6、螺旋矩阵II
题目简述
给你一个正整数 n ,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
思路
左闭右开原则,n为奇数单独赋值
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
nums = [[0]*n for _ in range(n)] #初始化
print(nums)
#(x,y)
startx,starty = 0,0
loop,mid = n//2,n//2
count = 1
for offset in range(1,loop+1):
#上行从左到右,列标变化
for i in range(starty,n-offset):
nums[startx][i] = count
count += 1
#右列从上到下,行标变化
for i in range(startx,n-offset):
nums[i][n-offset] = count
count += 1
#下行从右到左,列标变化
for i in range(n-offset,starty,-1):
nums[n-offset][i] = count
count += 1
#左列从下到上,行标变化
for i in range(n-offset,startx,-1):
nums[i][starty] = count
count += 1
startx += 1
starty += 1
#如果n是奇数,单独赋值最内层值
if n%2 == 1:
nums[mid][mid] = count
return nums
类似题目
- 54.螺旋矩阵
- 剑指offer 29.顺时针打印矩阵