第一题 有序数组的平方
题目描述:
给你一个按非递减顺序 排序的整数数组 nums,返回每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
思路:
比较简单的想法式先对每个数进行平方,在使用快速排序进行重新排序。但是原数组是有序的,负数的平方也有非常强的规律性,负数平方从右往左依次增大,正数从左往右依次增大,可以使用双指针进行操作可以有效降低时间复杂度。代码如下所示:
from typing import List
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
result = list(nums)
i, j = 0, len(nums)-1
k = len(nums)-1
while i <= j:
if nums[i] ** 2 > nums[j] ** 2:
result[k] = nums[i] ** 2
i += 1
else :
result[k] = nums[j] ** 2
j -= 1
k -= 1
return result
if __name__ == '__main__':
solution = Solution()
nums = [-4,-1,0,3,10]
print(solution.sortedSquares(nums) )
第二题 长度最小的子数组
题目描述:
给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
思路:
这也是一道双指针应用习题,具体代码如下:
from typing import List
from math import inf
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
result = inf
i = 0
num_sum = 0
for j in range(len(nums)):
num_sum += nums[j]
while num_sum >= target:
result = min(result, j - i + 1)
num_sum -= nums[i]
i += 1
if result == inf:
return 0
return result
if __name__ == '__main__':
solution = Solution()
target = 7
nums = [2,3,1,2,4,3]
print( solution.minSubArrayLen(target, nums) )
第三题 螺旋矩阵II
题目描述:
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
思路:
这道题考察对边界处理的判断,没有涉及其他编程知识,编程种始终遵循左闭右开原则即可,具体代码如下:
from typing import List
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
startx, starty = 0, 0
result = [ [0 for k in range(n)] for k in range(n)]
offset = 1
count = 1
k = n // 2
for index in range(k):
for j in range(starty, n-offset):
result[startx][j] = count
count += 1
for i in range(startx, n-offset):
result[i][n-offset] = count
count += 1
for j in range(n-offset, starty, -1):
result[n-offset][j] = count
count += 1
for i in range(n-offset, startx, -1):
result[i][starty] = count
count += 1
offset += 1
startx += 1
starty += 1
if n % 2 == 1:
result[k][k] = count
return result
if __name__ == '__main__':
solution = Solution()
print(solution.generateMatrix(4),sep='\n')