Day2|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

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

LeetCode 977.有序数组的平方

思路

利用python的sort方法,先平方,再排序。
时间复杂度O(n)+sort()方法的时间复杂度

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

双指针法
看了文章后,看了图

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

res = [float('inf')] * len(nums) # 需要提前定义列表,存放结果
定义新列表 无限大值

Python List sort()方法

描述
sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
语法
sort()方法语法:

list.sort(cmp=None, key=None, reverse=False)
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。

LeetCode 209. 长度最小的子数组

思路

尝试用之前学到的双指针的方法写代码,但是关于循环结束的条件总是不太确定。
写的代码也报错:超出范围。

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        length = len(nums)
        slow = 0
        fast = 1
        result = float('inf')
        sum = nums[slow]
        while slow < length - 1:
            sum += nums[fast]
            if sum < target and fast < length:
                fast += 1
            elif sum > target and fast < length:
                slow += 1
                fast = slow + 1
                sum = nums[slow]
            else:
                if result > fast - slow + 1:
                    result = fast - slow + 1
                slow += 1
                fast = slow + 1
                sum = nums[slow]
        return result

滑动窗口法:
显然,暴力解法的时间复杂度是O(n^2),需要计算数组中每一个数字作为开头时的子数组的和。而滑动窗口法同时调节起始位置和终止位置,实现O(n)的时间复杂度。

LeetCode 59. 螺旋矩阵 II

思路

暴力解法,新建一个nxn的二维列表,按照大小顺讯依次填入。
在写具体代码过程中,发现矩阵的螺旋性很难表示出来,不知道如何设置i和j,才能保证可以按照大小顺序依次填入。

看了代码随想录的文章,
关键在于边界条件的统一,四条边要做到全部都是左闭右开。

你可能感兴趣的:(代码随想录算法训练营,leetcode)