力扣刷题0629

977、有序数组的平方

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

关键词:快慢指针
题目链接:题目链接
视频讲解:视频讲解
自己题目理解:直接遍历平方再sort,或者利用快慢指针再排序(开始将i++和n–统一放在循环尾部,结果排出来一半数据。。。)

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        #i, n=0, len(nums)
        #while i<n:
        #    nums[i]=nums[i]**2
        #    i+=1
        #nums.sort()
        #return nums    #自己解题思路

        i, n = 0, len(nums)-1
        res=[]
        while i<=n:
            if nums[i]**2<nums[n]**2:
                res.append(nums[n]**2)
                n-=1
            else:
                res.append(nums[i]**2)
                i+=1

        return sorted(res)   #自己利用快慢指针
       

最终看了视频才知道可以提前定义空数组的个数,又属于小白的盲区了。。。

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:

        i, n, m= 0, len(nums)-1,len(nums)-1
        res=[0]*len(nums)#提前定义数组长度
        while i<=n:
            if nums[i]**2<nums[n]**2:
                res[m]=nums[n]**2
                n-=1
            else:
                res[m]=nums[i]**2
                i+=1
            m-=1#从后往前放数据,放完指针往前移动
        return res   #答案利用快慢指针

209.长度最小的子数组

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

关键词:滑动窗口
题目链接:链接
视频讲解:链接
自己理解题目:头脑风暴,一想就是很复杂,感觉只能暴力举例。。。
--------滑动窗口--------

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        i, j, n=0, 0,len(nums)    #分别表示边界起始和结束,数组长度
        s=0   #用来存放临时子数组和
        res, ll= float("inf"),0    #分别存放长度结果(赋值为正无穷)和每个满足条件的子数组长度
        for j in range(len(nums)):
            s+=nums[j]   #利用j来收集和
            while s>=target:  #当收集到的和满足条件时
               ll=j-i+1   #存放当前的长度
               res=min(res,ll)  #更新最小长度
               s=s-nums[i]    #寻找下一个满足条件的和,需要先减去子数组起始元素
               i+=1     #移动起始元素
        return res if res!=float("inf") else 0   #如果res未被更新过返回0

---------暴力解法---------超出时间限制

class Solution:
    def minSubArrayLen(self, s: int, nums: List[int]) -> int:
        l = len(nums)
        min_len = float('inf')   #初始化为正无穷
        
        for i in range(l):   #从起始0遍历数组
            cur_sum = 0      #每次遍历清零
            for j in range(i, l):  #从起始i开始遍历
                cur_sum += nums[j]  #求和
                if cur_sum >= s:  #满足条件时
                    min_len = min(min_len, j - i + 1)  #更新长度
                    break  #跳出当前起始i的遍历,以开始后面i++遍历
        
        return min_len if min_len != float('inf') else 0  #没有满足条件的返回0

59、螺旋矩阵II

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

题目链接:链接
视频链接:链接
自己思路:完全不会的状态,先理解吧

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        nums = [[0] * n for _ in range(n)]
        startx, starty = 0, 0               # 起始点
        loop, mid = n // 2, n // 2          # 迭代次数、n为奇数时,矩阵的中心点
        count = 1                           # 计数

        for offset in range(1, loop + 1) :      # 每循环一层偏移量加1,偏移量从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

        if n % 2 != 0 :			# n为奇数时,填充中心点
            nums[mid][mid] = count 
        return nums
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值