当前位置: 首页 > news >正文

代码随想录算法训练营第十五天 | 数组 |长度最小的子数组和螺旋矩阵II

长度最小的子数组

【题目简介】

【自写数组解法】

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        minLength = float('inf')
        slow = 0
        fast = 0
        cur_sum = nums[slow]

        # 终止条件:fast不能超过最大索引值
        while slow <= fast and fast <= len(nums)-1:
            # 需要重新计算时间
            if cur_sum >= target:
                minLength = min(minLength, fast-slow + 1)
                #print(slow, fast, cur_sum, minLength)
                cur_sum -= nums[slow]
                slow += 1


            if cur_sum < target:
                fast += 1
                if fast <= len(nums)-1:
                    cur_sum += nums[fast]
                # print("2: ",slow, fast, cur_sum, minLength)


            if fast == len(nums) and minLength == float('inf'):
                return 0

        return minLength
                

  1. 自己写的一种形式,AC了,不过有些地方想的不是很明白;
  2. 很有意思的一个想法是如果加和大于目标值,则起始位置+1;如果加和小于目标值,则终止位置-1;
  3. 循环条件:slow小于等于fast,同时fast应该小于等于最大索引值;
  4. 终止条件:如果fast达到最大索引的时候,并且最小长度依旧是inf时;
  5. 优化加和计算:一定要避免每次更新slow或者fast需要重复计算所有元素的总和!

螺旋矩阵II (有难度的!)

【题目简介】
在这里插入图片描述

  1. 循环次数:7–>3; 3–> 1; 所以for循环的次数是n//2; 具体的代码是:range(1, 1 + n//2);
  2. 上边界循环的边界:(1) range( offset-1, n-offset); matrix[offset-1][i];
  3. 右边界循环的边界:(2)range( offset-1, n-offset); matrix[j][n-offset];
  4. 下边界循环的边界:(3)range(n-offset, offset-1, -1); matrix[n-offset][i];
  5. 左边界循环的边界:(4)range(n-offset, offset-1, -1); matrix[j][offset-1];

【随想录解法】

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

【自优化解法】

class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        # 构建矩阵
        matrix = [[0] * n for _ in range(n)]

        # 构建循环
        loop, mid = n//2, n//2
        count = 1 # 

        # 螺旋矩阵需要注意规律: 全部围绕offset进行
        for offset in range(1, loop + 1):           # 注意的边界
            for i in range(offset-1, n - offset):   # 
                matrix[offset-1][i] = count
                count += 1
            for j in range(offset-1, n- offset):
                matrix[j][n-offset] = count
                count += 1
            for i in range(n-offset, offset-1, -1):
                matrix[n-offset][i] = count
                count += 1
            for j in range(n-offset, offset-1, -1):
                matrix[j][offset-1] = count
                count += 1

        # 中心区域的特殊处理
        if n%2 != 0:
            matrix[mid][mid] = count

        return matrix
  1. for循环中全部围绕offset进行即可;

相关文章:

  • uniapp页面列表,详情返回不刷新,新增或编辑后返回刷新
  • dify1.1.1安装
  • 如何设计一个合理的库存系统
  • 资源-HDR/材质/模型
  • AI大模型介绍
  • Seata框架 分布式事务实战 Demo-1
  • 二叉树的层平均值
  • 企业信息化的“双螺旋”——IT治理和数据治理
  • 北京市大模型备案及登记分析报告
  • 【设计模式】SOLID 设计原则概述
  • oracle 索引
  • 【鸿蒙开发】Hi3861学习笔记- WIFI应用AP建立网络
  • Python---数据分析(Pandas六:二维数组DataFrame,DataFrame的创建,DataFrame的属性)
  • CSS实现当鼠标悬停在一个元素上时,另一个元素的样式发生变化的效果
  • 前端网络请求
  • 面向对象(进阶)(‘封装‘,‘多态‘,‘对象属性‘,‘类属性‘,‘类方法‘,‘对象方法‘及其应用场景)
  • 糊涂人寄信——递推
  • 算法设计与分析——动态规划
  • KnowGPT知识图谱整合
  • 深入浅出理解LLM PPO:基于verl框架的实现解析之一
  • 霍步刚任辽宁沈阳市委书记
  • 昔日千亿房企祥生集团约2.03亿元债权被拍卖,起拍价8000万元
  • 美叙领导人25年来首次会面探索关系正常化,特朗普下令解除对叙经济制裁
  • 商务部就开展加强战略矿产出口全链条管控工作应询答记者问
  • 菲律宾中期选举初步结果出炉,杜特尔特家族多人赢得地方选举
  • “典孝急乐批麻蚌赢”:互联网“八字真言”与当代赛博赢学