977.有序数组的平方
题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
题目描述:给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
案例:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
思路分析:
题目整体思路使用双指针方法,需要设定一个新列表,旧列表用来查找,新列表用来更新
①设定3个索引下标值(j,j,k),i表示最左侧下标,j表示最右侧下标,k表示更新下标,也是从最右侧开始
②定义一个与原列表长度相同的新列表
③while当i<=j时,左右两边都分别进行平方
④if判断平方后的值,如果左边的值大于右边的值,那么就将左边的值更新,否则将右边的值进行更新
⑤最后返回更新后的新列表
实现
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
n = len(nums)
i,j,k= 0,n-1,n-1 #0,5,5
new_list = [-1]*n
while i<=j:
left = nums[i]**2
right = nums[j]**2
if left>right:
new_list[k] = left
i = i+1
else:
new_list[k] = right
j = j-1
k = k -1
return new_list
209.长度最小的子数组
题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
题目描述:给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
案例:
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
输入:target = 4, nums = [1,4,4]
输出:1
输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0
方法一:暴力解法
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
res = [] #存放满足条件的子数据组长度
for i in range(len(nums)):
for j in range(i+1,len(nums)+1):
if sum(nums[j:j]) >=target:
# 将此时的子数组长度记录到res中
res.append(len(nums[i:j]))
# 不符合条件,返回0
if len(res) == 0:
return 0
else:
return min(res)
方法二:滑动窗口
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
# """
# 解题方法:滑动窗口
# """
start = 0 # 起始start指针
sum = 0 # 用于求和
min_len = 0
# end指针for循环遍历
for end in range(len(nums)):
sum += nums[end] # 求和
while sum >= target: # 符合条件时,缩减窗口
sub_len = end - start + 1 # 此时子数组的长度
if min_len == 0:
min_len = sub_len
else:
min_len = min(min_len, sub_len)
# 找到符合条件的之后 起始start指针需要右移一位 sum值也同步更新
sum -= nums[start]
start += 1
return min_len # 最后返回最小值
59. 螺旋矩阵 II
题目链接:https://leetcode.cn/problems/spiral-matrix-ii/
题目描述:给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
输入:n = 1
输出:[[1]]
实现