[60天lc] Day2: 977,209,59

977. 有序数组的平方

一行偷懒解法:

class Solution(object):
    def sortedSquares(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
       
        return sorted([x**2 for x in nums])

正式版:

  • 数组身有序 ——> 平方后最大值一定在两端——>双指针
class Solution(object):
    def sortedSquares(self, nums):
        """
        :type nums: List[int]
        :rtype: List[int]
        """
        res = []

        i,j = 0, len(nums)-1

        while i <= j:
            if nums[i]**2 <= nums[j]**2:
                res.append(nums[j]**2)
                j -= 1
            else:
                res.append(nums[i]**2)
                i += 1
        
        return res[::-1]

 


209. 长度最小的子数组

提示O(n):想到 滑动窗口 方法

第一次尝试——超时:

class Solution(object):
    def minSubArrayLen(self, target, nums):
        """
        :type target: int
        :type nums: List[int]
        :rtype: int
        """
        start, end = 0, 0
        res = float("inf")
        
        while start <= end and start < len(nums) and end < len(nums):
            if sum(nums[start:end+1]) >= target :
                if end-start+1 < res:
                    res = end - start + 1
                start += 1
            else:
                end += 1 
        
        return 0 if res == float("inf") else res 

改进方式:

  • 超时:主要是在于计算sum的时候耗费O(n)的时间
  • 未判断空的异常情况

第二次尝试——成功

class Solution(object):
    def minSubArrayLen(self, target, nums):
        """
        :type target: int
        :type nums: List[int]
        :rtype: int
        """
        if len(nums) == 0 or not nums:
            return 0

        start, end = 0, 0
        res = float("inf")
        total = 0

        while end < len(nums):
            total += nums[end]

            while total >= target:
                res = min(res, end-start+1)
                total -= nums[start]
                start += 1
            
            end += 1 
        
        return 0 if res == float("inf") else res

注意加减total和移动指针的顺序:先加减、再移动


59. 螺旋矩阵 II

试了几次都不对,看了别人的解法,学习了一种容易理解的:

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        # 初始化参数
        l,r,t,b = 0, n-1, 0, n-1                            # 标记上下左右
        matrix = [[0 for _ in range(n)] for _ in range(n)]  # 初始化matrix
        num, tar = 1, n*n                                   # 初始化当前预备插入值和结束值

        while num <= tar:
            # 从左到右
            for i in range(l, r + 1):
                matrix[t][i] = num
                num += 1
            t += 1

            # 从上到下
            for i in range(t, b + 1):
                matrix[i][r] = num
                num += 1
            r -= 1

            # 从右到左
            for i in range(r, l - 1, -1):
                matrix[b][i] = num
                num += 1
            b -= 1

            # 从下到上
            for i in range(b, t - 1, -1):
                matrix[i][l] = num
                num += 1
            l += 1
        return matrix

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值