#977 有序数组的平方
双指针用法
内置函数enumerate
seq = ['one', 'two', 'three']
>>> for i, element in enumerate(seq):
print i, element
0 one
1 two
2 three
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
n = len(nums)
result = [0] * n
i, j, k = 0, n-1, n-1
while i <= j:
ln = nums[i] ** 2
rn = nums[j] ** 2
if ln > rn:
result[k] = ln
i += 1
else:
result[k] = rn
j -= 1
k -= 1
return result
#209.长度最小的子数组
思路:i和j,当j遍历到总和大于s了,取当下长度,接着移动i,判断当下的j-i+1长度的总和是否大于s,如果不,移动j,直至大于s,取当下长度;
滑动窗口,要不断的调节起始位置i
注意初始设置result要足够大保证能取子序列里的最小值,比较当下取的子序列和result的值取最小
float() 函数用于将整数和字符串转换成浮点数
return时要考虑target永远不存在在序列中的情况,比如[1,1,1,1,1,1],target是11
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
result = float('inf') #定义一个足够大的数
i, j = 0, 0 #初始终止位置均设置成0
num = 0 #设置初始和
for j in range(len(nums)):
num += nums[j]
while num >= target:
result = min(result, j-i+1)#比较当前的和里数量最小的值
num -= nums[i] #i要开始移动了
i += 1 #顺序不能错
return 0 if result == float("inf") else result #考虑[1,1,1,1,1] target 11,没有的情况
#59.螺旋矩阵II
左闭右开的概念,要循环一个原则
从左到右缩小上边界
从上到下缩小右边界
从右到左缩小下边界
从下到上缩小左边界
class Solution:
def generateMatrix(self, n: int) -> [[int]]:
l, r, t, b = 0, n - 1, 0, n - 1
mat = [[0 for _ in range(n)] for _ in range(n)]
num, tar = 1, n * n
while num <= tar:
for i in range(l, r + 1): # left to right
mat[t][i] = num
num += 1
t += 1
for i in range(t, b + 1): # top to bottom
mat[i][r] = num
num += 1
r -= 1
for i in range(r, l - 1, -1): # right to left
mat[b][i] = num
num += 1
b -= 1
for i in range(b, t - 1, -1): # bottom to top
mat[i][l] = num
num += 1
l += 1
return mat
- 今日学习的文章链接
- 自己看到题目的第一想法
毫无头绪
- 看完代码随想录之后的想法
依次处理边界
- 自己实现过程中遇到哪些困难
设置初始值没有想法
- 今日收获,记录一下自己的学习时长