代码随想录算法训练营第一天 | 977.有序数组的平方;
977题链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
代码随想录链接:https://programmercarl.com/0977.有序数组的平方.html#思路
209题链接:https://leetcode.cn/problems/minimum-size-subarray-sum/submissions/534560400/
代码随想解答:https://programmercarl.com/0209.长度最小的子数组.html#其他语言版本
今日任务
- 八股背诵:HTTP部分:HTTPS和HTTP区别、UDP和TCP(拥塞控制、滑动窗口)、
- 代码随想录补打卡day1、day2;
- 毕设实验;
第一遍解题难点:
- 整理出来了实际是比较绝对值大小;
- 没有考虑到两边大中间小的特征,惯性思维想遍历,没想到可以从两端使用指针;
- 在思考如何赋值的时候忘记了python复制语句;
最终解答:
def sortedSquares(self, nums: List[int]) -> List[int]:
res = ['inf']*len(nums) ##先创建相应的空间
l,r,i = 0,len(nums)-1,len(nums)-1 ##l,r分别为两端指针;i是赋值指针
while l<=r:
if abs(nums[l])>=abs(nums[r]):
res[i] = nums[l]*nums[l]
l = l+1
else:
res[i] = nums[r]*nums[r]
r = r-1
i = i-1
return res
209
第一遍解题难点:
- 理解错了题意:是大于等于的连续子数组,不是等于的连续子数组;
- 双指针的滑动窗口:只动了一边,效率低;
最终解答
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
left = 0
right = 0
min_len = float('inf')
sum_ = 0
while right<len(nums):
sum_=sum_+nums[right]
while sum_>=target:
min_len = min(min_len,right-left+1)
sum_ = sum_-nums[left]
left = left+1
right = right+1
if min_len==float('inf'):
return 0
else:
return min_len
标签:977,right,min,int,训练营,nums,随想录,len
From: https://www.cnblogs.com/P201821440041/p/18211833