程式碼隨想錄演算法訓練營第一天 | 977.有序陣列的平方;

哆啦**發表於2024-05-24

程式碼隨想錄演算法訓練營第一天 | 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#其他語言版本

今日任務

  1. 八股背誦:HTTP部分:HTTPS和HTTP區別、UDP和TCP(擁塞控制、滑動視窗)、
  2. 程式碼隨想錄補打卡day1、day2;
  3. 畢設實驗;

第一遍解題難點:

  • 整理出來了實際是比較絕對值大小;
  • 沒有考慮到兩邊大中間小的特徵,慣性思維想遍歷,沒想到可以從兩端使用指標;
  • 在思考如何賦值的時候忘記了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

相關文章