977.有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
class Solution(object):
def sortedSquares(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
left,right = 0 , len(nums)-1
i = len(nums)-1
new_array = [None] * len(nums)
while left <= right:
if nums[left]**2 < nums[right]**2:
new_array[i] = nums[right]**2
right = right-1
i = i-1
else:
new_array[i] = nums[left]**2
i = i-1
left = left + 1
return new_array
# @lc code=end
思路很简单,使用双指针法,从数组的最左端和最右端开始往中间靠拢,将平方后大的项放到新数组的末尾。
209.长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
class Solution(object):
def minSubArrayLen(self, target, nums):
"""
:type target: int
:type nums: List[int]
:rtype: int
"""
left, right = 0,0
min_legth = float('inf')
sum = 0
while right < len(nums):
sum = sum + nums[right]
while sum >= target:
if min_legth > right-left:
min_legth = right-left+1
sum = sum - nums[left]
left = left + 1
right = right +1
if min_legth == float('inf'):
return 0
return min_legth
心得:
在left指针往右移动的时候,是一个while循环而并非if判断,因为需要不断地往右移动left指针以判定最短长度
float(‘inf’)指正无穷
59.螺旋矩阵II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
matrix= [[0 for i in range(n)]for i in range(n)]
tar = n*n
num = 1
t,b,l,r = 0,n-1,0,n-1
while num <= tar:
for i in range(l,r+1):
matrix[t][i] = num
num += 1
t += 1
for i in range(t,b+1):
matrix[i][r] = num
num +=1
r -= 1
for i in range(r,l-1,-1):
matrix[b][i] = num
num +=1
b -= 1
for i in range(b,t-1,-1):
matrix[i][l] = num
num += 1
l += 1
return matrix
总结:构建二维数组的时候从外到内进行构建,一步步来
创建一个n*n的矩阵:matrix= [[0 for i in range(n)]for i in range(n)]