刷题笔记2-977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,数组总结

刷题2-977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,数组总结

有序数组三个方法,长度最小的子数组两个方法,螺旋矩阵纯写(模拟行为)



1.有序数组的平方

题目链接
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 :
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

暴力破解

直接理解,先一个一个平方,再排序

#暴力破解
class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        for i in range(len(nums)):
            nums[i]*=nums[i]
        j=sorted(nums)  # nums.sort()不要变量接收-永久排序,sorted()需要-临时排序
        return j

暴力+列表推导

列表(list)推导:将循环和条件语句的功能结合到一行代码中
基础语法:

	[expression for item in iterable]
class Solution:
   def sortedSquares(self, nums: List[int]) -> List[int]:
       return sorted(i**2 for i in nums)

双指针

数组有序,平方之后的最大值在必定在数组两头。
比较两头大小,放入新列表。

  • float(‘inf’) 表示正无穷大
    双指针法
#双指针法
class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        l=0
        r=i=len(nums)-1
        result=len(nums)*[float('inf')] #长度*空间大小
        while l<=r:
            if nums[l]**2<nums[r]**2:
                result[i]=nums[r]**2
                r-=1
            else:
                result[i]=nums[l]**2
                l+=1
            i-=1
        return result
        

总结

使用三种方法解题,复习了双指针法


2.长度最小的子数组

题目链接
给定一个含有 n 个正整数的数组和一个正整数 target 。
找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。
示例 :
输入:target = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。

暴力破解

目的:找到>=target的最小长度
本方法在leetcode超时

#暴力破解
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        lenth=len(nums)
        minlen=float('inf')
        for i in range(lenth):
            sum=0
            for j in range(i,lenth):
                sum+=nums[j]
                if sum>=target:
                    minlen=min(minlen,j-i+1)
                    break
        if minlen!=float('inf'):
            return minlen
        else:
            return 0

滑动窗口

  • 调节窗口开始(左)和结束位置(右)
  • 原理:小于右扩,大于左缩
    小扩大缩
#滑动窗口(双指针)
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        left=right=0
        minlen=float('inf')
        sum=0
        for right in range(len(nums)):#找第一个>=target
            sum+=nums[right]
            while sum>=target:
                minlen=min(minlen,right-left+1)
                sum-=nums[left] #减掉窗口最左侧
                left+=1
        if minlen!=float('inf'):
            return minlen
        else:
            return 0  

总结

滑动先画图,多了缩小,小了扩大,一直更新minlen


3.螺旋矩阵II

题目链接
给你一个正整数 n n n ,生成一个包含 1 到 n 2 n^2 n2 所有元素,且元素按顺时针顺序螺旋排列的 n ∗ n n*n nn正方形矩阵 matrix 。
示例:
示例
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

  • 怎么画这个正方形
  • 是左闭右开,还是左闭右闭
  • 要不要填充中心点nums[i][i](看奇偶)
#左闭右开
class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        nums=[[0]*n for _ in range(n)] #生成n*n的0列表
        x=y=0
        count=1
        loop=mid=n//2
        for bias in range(1,loop+1): #循环圈数
            for j in range(y,n-bias): #i控制行,j控制列;左到右
                nums[x][j]=count
                count+=1
            for i in range(x,n-bias):#上到下
                nums[i][n-bias]=count
                count+=1
            for j in range(n-bias,y,-1):#右到左
                nums[n-bias][j]=count
                count+=1
            for i in range(n-bias,x,-1):#下到上
                nums[i][y]=count
                count+=1
            x+=1
            y+=1
        if n%2!=0: #n为奇数进行中心填充
            nums[mid][mid]=count
        return nums

总结

没具体算法,靠观察,画个图,不然太容易乱了


4.数组总结

借个图
总结

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我会为你介绍Python中的数组。 在Python中,数组是一种存储元素的数据结构。与列表不同,数组是固定大小的,且元素类型必须相同。 要使用数组,需要先导入array模块。下面是一个创建数组的示例: ```python import array as arr # 创建一个整数类型的数组 a = arr.array('i', [1, 2, 3, 4, 5]) # 打印数组 print(a) ``` 在上面的示例中,我们使用了`array`模块创建了一个整数类型的数组,并初始化了它。要注意的是,第一个参数是一个字符,用于指定数组元素的类型。在本例中,我们使用了`i`,表示整数类型。 除了整数类型之外,还有其他类型可以使用,如`f`表示浮点数,`d`表示双精度浮点数,`b`表示布尔类型等。 在数组中,可以使用索引来访问元素,如下所示: ```python import array as arr # 创建一个整数类型的数组 a = arr.array('i', [1, 2, 3, 4, 5]) # 访问数组中的第一个元素 print(a[0]) # 修改数组中的第二个元素 a[1] = 6 # 打印数组 print(a) ``` 在上面的示例中,我们使用了索引`0`来访问数组中的第一个元素,使用索引`1`来修改数组中的第二个元素。 除了使用索引来访问和修改元素外,还可以使用循环来遍历数组中的所有元素,如下所示: ```python import array as arr # 创建一个整数类型的数组 a = arr.array('i', [1, 2, 3, 4, 5]) # 遍历数组中的所有元素 for i in a: print(i) ``` 在上面的示例中,我们使用了`for`循环来遍历数组中的所有元素,并打印每个元素的值。 这就是Python中数组的基本用法。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值