代码随想录第二天

有序数组

解题思路:

1、有序数组,最大的值一定在两端,所以直接用双指针比较两端的地址谁大就可以了。

2、较大的一方,放在新数组的最后一个为止

3、i=j,想一下只有一个元素的场景,就可以推断出i可以等于j

4、右侧数比较大的时候,将右侧的平方更新新数组中,并向左-1.其他时候,将左侧的数字更新到数组中,并向右+1即可。i=j的时候一样,谁放里都行,所以直接else 包含了相等的情况

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        n = len(nums)
        i, j, k = 0, n-1, n-1
        res = [-1] * n /
        while i <= j:
            lm = nums[i] ** 2
            rm = nums[j] ** 2
            if lm > rm :
                res[k] = lm
                i += 1
            else:
                res[k] = rm
                j -= 1
            k-=1
        return res

寻找长度最小的子数组

解题思路:

用j去遍历,让他成为右边窗口的临界值

i控制左边窗口的值。

在遍历过程中记录窗口的最小值res

若达到了和大于等于target的标准,则左边窗口向左滑动一个,并在sum中去除出了滑动窗口的值

class Solution:
    def minSubArrayLen(self, s: int, nums: List[int]) -> int:
        # 定义一个无限大的数
        res = float("inf")
        i =j= 0
        sum=0
        while j<len(nums):
            sum+=nums[j]
            while sum>=s:
                res=min(res,j-i+1)
                sum-=nums[i]
                i+=1
            j+=1
        if res ==float("inf"):
            return 0
        else: 
            return res

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值