代码随想录第二天: 有序数组平方和长度最小子数组

文章介绍了如何利用双指针技巧解决LeetCode中的两个问题:有序数组的平方计算和找到最小子数组和等于目标的问题。通过先平方后排序或边比较边调整策略,展示了Python中的高效解决方案。
摘要由CSDN通过智能技术生成

有序数组平方

题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
文章讲解:https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html
视频讲解: https://www.bilibili.com/video/BV1QB4y1D7ep

思路

关键点是要处理有序数组两边的值大于中间的值,然后利用双指针进行操作,建议先看下代码,这个题直接求平方然后排序也更加直观一下;

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        l = 0
        r = len(nums) - 1
        i = len(nums) - 1
        # 先设置一个等长的数组进去  
        result = [float('inf')] * len(nums)
        while l <= r:
            if nums[l] **2 > nums[r]** 2:
                result[i] =nums[l] **2
                l +=1
            else:
                result[i] =nums[r] **2
                r -= 1
            i-= 1
        return result




以下代码是通过先平方再排序的方式:

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        for i in range(len(nums)):
            nums[i]= nums[i] ** 2
        nums.sort()
        return nums
    		


python语法初始化列表 :

result = [float(‘inf’)] * len(nums)

float(‘inf’): 这是Python中的一种特殊表示,表示正无穷大(infinity)。在数学中,正无穷大表示比任何有限实数都要大的数。我们把res列表中的每个元素都初始化为正无穷大,这是因为在某些算法中,用一个初始值来表示“无穷大”或“无效”等特殊状态。

最小子数组

题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
文章讲解:https://programmercarl.com/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.html
视频讲解:https://www.bilibili.com/video/BV1tZ4y1q7XE




class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        # 即使知道了原理也不知道怎么敲
        l = len(nums)
        left = 0
        right = 0
        length = float('inf')
        sumNum = 0
        while right < l:
            sumNum += nums[right]

            while sumNum >= target:
                length= min(length,right - left+1)
                sumNum -= nums[left]
                left+=1
            right+=1

        return length if length != float('inf') else 0
  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值