Python力扣刷题02-有序数组的平方 &长度最小子数组 &螺旋矩阵

977.有序数组的平方

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

题目描述:给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

案例:

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

思路分析:

题目整体思路使用双指针方法,需要设定一个新列表,旧列表用来查找,新列表用来更新

①设定3个索引下标值(j,j,k),i表示最左侧下标,j表示最右侧下标,k表示更新下标,也是从最右侧开始

②定义一个与原列表长度相同的新列表

③while当i<=j时,左右两边都分别进行平方

④if判断平方后的值,如果左边的值大于右边的值,那么就将左边的值更新,否则将右边的值进行更新

⑤最后返回更新后的新列表

实现

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

209.长度最小的子数组

题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/

题目描述:给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

案例:

输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

输入:target = 4, nums = [1,4,4]
输出:1

输入:target = 11, nums = [1,1,1,1,1,1,1,1]
输出:0

方法一:暴力解法

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        res = [] #存放满足条件的子数据组长度
        for i in range(len(nums)):
            for j in range(i+1,len(nums)+1):
                if sum(nums[j:j]) >=target:
                    # 将此时的子数组长度记录到res中
                    res.append(len(nums[i:j]))
        # 不符合条件,返回0
        if len(res) == 0:
            return 0 
        else:
            return min(res) 

方法二:滑动窗口

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        # """
        # 解题方法:滑动窗口
        # """
        start = 0  # 起始start指针
        sum = 0  # 用于求和
        min_len = 0

        # end指针for循环遍历
        for end in range(len(nums)):
            sum += nums[end]  # 求和
            while sum >= target:  # 符合条件时,缩减窗口
                sub_len = end - start + 1  # 此时子数组的长度
                if min_len == 0:
                    min_len = sub_len
                else:
                    min_len = min(min_len, sub_len)
                # 找到符合条件的之后 起始start指针需要右移一位 sum值也同步更新
                sum -= nums[start]
                start += 1
        return min_len  # 最后返回最小值

59. 螺旋矩阵 II

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

题目描述:给你一个正整数 n ,生成一个包含 1n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix
在这里插入图片描述

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

输入:n = 1
输出:[[1]]

实现


猜你喜欢

转载自blog.csdn.net/modi88/article/details/127570992