Day2-第一章数组

有序数组的平方

题目链接977

题目简述

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

我的题解(暴力排序)

每个数平方后,调用sort()

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
    	res = []
    	for i in nums:
    		i = i**2
    		res.append(i)
    	res.sort()
    	return res
双指针法

双指针图解

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
    	    n = len(nums)
    	    i,j,k = 0,n-1,n-1
    	    res = [0] * n #初始化列表
    	    while i <= j:
    	        if (nums[i]**2) > (nums[j]**2):
    	            res[k] = nums[i]**2
    	            i += 1
    	        else:
    	            res[k] = nums[j]**2
    	            j -= 1
    	        k -= 1
    	    return res
    			

== 注 ==
双指针时间复杂度o(n)

209、长度最小的子数组

题目链接209

题目简述

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

思路循环窗口法

i,j初试为0
一个for循环表示滑动窗口的终止位置j
起始位置移动规则
若sum >= target,则i向后移

== 代码说明==
定义无穷大的数,用于比较得到最小值(float(“inf”))
== 图解 ==
在这里插入图片描述

题解

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        i = 0
        sum = 0
        res = float("inf") #定义一个无穷大的数
        for j in range(len(nums)):
            sum += nums[j]
            while sum >= target:
         				    res = min(res,j-i+1) #子序列长度
         				    sum -= nums[i]
         				    i += 1
        if res == float("inf"):
        					return 0
        else:
        					return res	
        #时间复杂度o(n)		 

类似题目

  • 904.水果成篮
  • 76.最小覆盖子串

6、螺旋矩阵II

题目链接6

题目简述

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

思路

左闭右开原则,n为奇数单独赋值

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        nums = [[0]*n for _ in range(n)] #初始化
        print(nums)
        #(x,y)
        startx,starty = 0,0
        loop,mid = n//2,n//2
        count = 1
        for offset in range(1,loop+1):
            #上行从左到右,列标变化
            for i in range(starty,n-offset):
                nums[startx][i] = count
                count += 1
            #右列从上到下,行标变化
            for i in range(startx,n-offset):
            					nums[i][n-offset] = count
            					count += 1
            #下行从右到左,列标变化
            for i in range(n-offset,starty,-1):
            					nums[n-offset][i] = count
            					count += 1
            	#左列从下到上,行标变化
            for i in range(n-offset,startx,-1):
                nums[i][starty] = count
                count += 1
            startx += 1
            starty += 1
            	
        #如果n是奇数,单独赋值最内层值
        if n%2 == 1:
            nums[mid][mid] = count
        return nums

类似题目

  • 54.螺旋矩阵
  • 剑指offer 29.顺时针打印矩阵
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值