Leecode 刷题第二天 | 977.有序数组的平方 209.长度最小的子数组 59. 螺旋矩阵 II

977 有序数组的平方 

题目连接:https://leetcode.cn/problems/squares-of-a-sorted-array/description/

暴力解法:

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        return sorted(num * num for num in nums)

双指针解法:

数组其实是有序的, 只不过负数平方之后可能成为最大数了。

那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。

此时可以考虑双指针法了,i指向起始位置,j指向终止位置。

过程易错点:

1、result定义的时候,应该注意定义为一个与nums长度相同的数组,如果单单定义为一个空数组,下面进行更新时会报错,因为空数组应该是添加元素而不是更新index的元素

2、python语言中的平方写法是**

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

209.长度最小的子数组

题目链接:力扣

滑动窗口写法:

1、无限大的数的写法是 float("inf")

2、如果里面不做判断可以将返回写成:

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        i = 0
        sum  = 0
        result = float("inf")
        for j in range(len(nums)):
            sum += nums[j]
            while(sum >= target):
                L = j - i + 1
                result = min(result, L)
                sum -= nums[i]
                i += 1
        return 0 if result==float("inf") else result
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        i = 0
        sum  = 0
        result = float("inf")
        for j in range(len(nums)):
            sum += nums[j]
            if j == len(nums)-1 and sum < target:
                return 0
            while(sum >= target):
                L = j - i + 1
                result = min(result, L)
                sum -= nums[i]
                i += 1

        return result

59. 螺旋矩阵 II

题目链接:https://leetcode.cn/problems/spiral-matrix-ii/

遇到的问题:

1、随机生成n*n的矩阵,可参考:https://blog.csdn.net/justheretobe/article/details/7632487

2、遍历时边界值的处理

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        startx = 0
        starty = 0
        count = 1
        array = [[0] * n for _ in range(n)]
        for offset in range(1, n//2+1):
            for j in range(starty, n-offset):
                array[startx][j] = count
                count += 1
            for i in range(startx, n-offset):
                array[i][n-offset] = count
                count += 1
            for j in range(n-offset, starty, -1):
                array[n-offset][j] = count
                count += 1
            for i in range(n-offset, startx, -1):
                array[i][starty] = count
                count += 1
            startx += 1
            starty += 1
        if n%2 == 1:
            array[n//2][n//2] = count
        return array

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值