程式碼隨想錄演算法訓練營第一天 | 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