代码随想录算法训练营第二天 | 977.有序数组的平方;209.长度最小的子序列

代码随想录算法训练营第一天 | 977.有序数组的平方;209.长度最小的子序列

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
posted @ 2024-05-24 23:26  哆啦**  阅读(2)  评论(0编辑  收藏  举报