Leetcode 977 Squares of a Sorted Array
- 题目链接:leetcode.com/problems/sq…
- 文章讲解:代码随想录 programmercarl.com
- 视频讲解:双指针法经典题目 | LeetCode:977.有序数组的平方
- 状态:有暴解出来
1. 第一想法
没想到怎么用双指针,于是都平方了然后排序
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
res = []
for i in nums:
a = i*i
res.append(a)
res.sort()
return res
2. 看完后想法
因为原数组是排过序的,平方后不是左边最大就是右边最大,所以考虑双指针。
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
l, r, i = 0, len(nums)-1, len(nums)-1
res = [float('inf')] * len(nums)
while l <= r:
if nums[l] ** 2 < nums[r] ** 2:
res[i] = nums[r] ** 2
r -= 1
else:
res[i] = nums[l] ** 2
l += 1
i -= 1
return res
3. 总结
暴解是比较容易想到的,以后要注意原数组是否排序过。
Leetcode 209 Minimum Size Subarray Sum
- 题目链接:leetcode.com/problems/mi…
- 文章讲解:代码随想录 programmercarl.com
- 视频讲解:拿下滑动窗口! | LeetCode 209 长度最小的子数组
- 状态:没做出来😫
1. 第一想法
我知道要用 sliding window,我知道我做过看过讲解,印象里是不是要用 hash 什么的,但是再一次面对还是不会。
2. 看完后想法
知道要用 sliding window 反而有点缺乏想象力了,暴解本应是可以想到的。开始需要思考循环的变量是起始还是终止位置。
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
l = len(nums)
left = 0
right = 0
min_len = float('inf')
cur_sum = 0
while right < l:
cur_sum += nums[right]
while cur_sum >= target:
min_len = min(min_len, right - left + 1)
cur_sum -= nums[left]
left += 1
right += 1
return min_len if min_len != float('inf') else 0
3. 总结
感觉还是有些难的,不确定自己之后做能不能做出来。
Leetcode 59 Spiral Matrix II
- 题目链接:leetcode.com/problems/sp…
- 文章讲解:代码随想录 programmercarl.com
- 视频讲解:一入循环深似海 | LeetCode:59.螺旋矩阵II
- 过程:没做出来😫
1. 第一想法
没有想法。
2. 看完后想法
也不是没想过要左开右闭,但是觉得代码实现会很麻烦。
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
nums = [[0] * n for _ in range(n)]
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
if n % 2 != 0:
nums[mid][mid] = count
return nums
3. 总结
确实感觉比较麻烦。