代码随想录算法训练营第二天| 977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II、

977. 有序数组的平方 - 力扣(LeetCode)

一开始没想出来怎么用双指针,直接爆破

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

方法二 双指针(左右指针)

因为题目给的数组是非递减顺序,所以两边的平方一般比中间大(存在负数)

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        result = nums.copy()
        k = -1
        left = 0
        right = len(nums)-1

        while left <= right:
            if nums[left]**2 > nums[right]**2:
                result[k] = nums[left]**2
                left = left+1        
            else:
                result[k] = nums[right]**2
                right = right-1

            k = k-1

        return result
  • 第一种速度比第二种快,为什么?

209. 长度最小的子数组 - 力扣(LeetCode)

一开始想写从起始点开始的双指针,边界太难找,没成功

滑动窗口

class Solution(object):
    def minSubArrayLen(self, target, nums):
        i = 0
        sum = 0
        result = len(nums) + 1 
        for j in range(len(nums)):
            sum = sum + nums[j]
            while sum >= target:
                sub_l = j-i+1
                result = min(result, sub_l)
                sum = sum - nums[i]
                i = i+1
        if result == len(nums) + 1:
            result = 0
        return result

*和原本爆破方法不同,滑动窗口区间由少到多判断,爆破区间由多到少判断,所以一个for就可以解决。

59. 螺旋矩阵 II

看到题目完全没思路,直接看题解

解题思路

一圈一圈从里到外循环,注意边界处理方法统一

方法一

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """


        star_x, star_y = 0, 0 
        offset = 1
        count  = 1
        matrix = [[0] * n for _ in range(n)]

        for quan in range(n//2):
            i = star_x
            j = star_y
            while j < n-offset:
                matrix[i][j] = count
                count = count+1
                j = j+1
            while i < n-offset:
                matrix[i][j] = count
                count  = count+1
                i = i+1
            while j > offset-1:
                matrix[i][j] = count
                count = count + 1
                j = j-1
            while i > offset-1:
                matrix[i][j] = count
                count = count+1
                i = i-1
            star_x = star_x + 1
            star_y = star_y + 1
            offset = offset + 1
        
        if n % 2 == 1:
            matrix[n//2][n//2] = count
        
        return matrix
  • python 刷题的时候不要用numpy库
  •   :type n: int
      :rtype: List[List[int]]  #题目中参数类型明确给了,不要自己重新定义
    
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容