代码随想录算法训练营Day 2 | 209.长度最小的子数组、59.螺旋矩阵II、

基于虚拟阻抗重塑的构网型VSG变流器SISO序阻抗建模与宽频振荡抑制策略分析(面向高比例新能源并网场景) 本文深入探讨了基于虚拟阻抗控制的构网型VSG变流器SISO序阻抗建模技术及其在高比例新能源并网场景中的宽频振荡抑制策略。通过虚拟阻抗重塑,有效改善了变流器的阻抗特性,解决了次/超同步频段的振荡问题,并提供了参数设计、阻抗扫频验证等实用技巧,为新能源并网系统的稳定性提供了可靠解决方案。 阅读详情

 一、209.长度最小的子数组

1. 看到题目的第一想法

        使用快慢指针的方式,初始化都指向下标为0的数组元素;然后慢指针不动,挪动快指针,计算数组内元素总和,如果大于等于target快指针就停止挪动,并计算长度;然后依次挪动慢指针,重复上述循环;最后比较长度最小的子数组,返回它的长度。

2. 看完代码随想录的想法

使用双指针法,采用滑动窗口的思路

        1)定义双指针,初始化双指针均指向索引为0的元素;定义一个数组用于计算滑动窗口内元素的总和,并且将它初始化为0;定义一个正无穷大的数,用于取得总和大于等于target的子数组最小长度;

        2)使用while循环,为了防止指针溢出,当快指针小于等于len(nums)-1时进入循环,否则跳出循环;进入循环后,随着快指针依次向后移动一位,SUM数组依次计算快指针对应的元素总和;

        3)嵌套子循环,即当sum总和大于等于target时进入循环来移动慢指针:首先要比较子数组最小程度和,即使用min函数取无穷大以及目前子数组长度(fast-slow+1)二者中的最小值;其次先计算移动慢指针后的数组和,即sum减去目前慢指针所指向的元素值,再移动慢指针向前一位;

        4)完成最外层while循环后,需要将快指针向后移动一位

        5)返回子数组的最小长度,如果不存在满足条件的子数组,则返回0

3. 实现过程遇到的困难及解决

        1)想要定义数组,问题复杂化:只需要定义sum变量和min_len变量分别用于计算子数组长度和、取子数组的最小长度。min_len变量初始需要定义为无穷大,方便用于后续比较最小值:           

                ​​​​​​​        ​​​​​​​        ​​​​​​​        

        2)没有想清楚应该遍历移动快指针还是慢指针:如果遍历移动慢指针,则和暴力解法没有区别,时间空间复杂度很高;因此只能遍历移动快指针,利用快指针先得到一个窗口,如何再移动慢指针逐渐缩小窗口。

        3)关于先移动慢指针还是先缩小子数组的总和:如果先移动慢指针,则sum = sum -  nums[slow]这一步的nums[slow]就会被减错;因此必须先减去目前慢指针对应的元素,再移动慢指针。

 二、59.螺旋矩阵II

1. 看到题目的第一想法

        首先,N的奇偶性需要分开讨论,N位奇数时其矩阵最后会多一个中心点;第二,需要使用循环函数按螺旋顺序来依次生成矩阵元素;第三,需要统一生成矩阵的函数形式,即左闭右开,每一次循环其最后一个元素留到下一个循环生成;并且最后一次循环需要注意N的奇偶性。但是问题在于,螺旋的旋转顺序和最后呈现的矩阵形式并不相同,不知如何处理。

2. 看完代码随想录的想法

        1)螺旋矩阵本质上是一个二维数组,因此首先定义一个二维数组:

                            ​​​​​​​

其次要根据给出的N去思考会旋转几圈,即 loop = n//2;然后需要定义起始点,因为每一条边的起始点都各不相同,即定义startx、starty;最后,由于每次旋转一整圈,下一圈的元素行列索引均会缩进一个单位,因此定义offset,并将其初始化为1;定义count变量用于为矩阵元素赋值。

        2)要实现每一条边的遍历规则一致,因此采用左闭右开的方式进行遍历。第一条横向的边,i是不改变的,只有 j 依次递增;第二条纵向的边j到达最大值,保持不变,i 依次递增;第三条边的 j 到达最大值保持不变,i 依次递减,需要在range函数加上-1;最后一条边 j 处于最小值,而 i 处于最大值,i 依次向上递减;在每条边的遍历过程中,需要为矩阵元素使用count进行赋值,并且count依次+1;

        3)进入下一个循环需要offset+1,startx+1, starty+1;

        4)根据n的奇偶性,要知道当n是奇数时,则会比偶数多出一个中性点,mid = n//2, 最后加一个奇偶判断条件即可,中心点的值为nums[mid][mid]=count。

3. 实现过程中遇到的困难及解决

        1)如何定义数组,数组下标从0开始,不能大于n:初始化数组nums = [[0] * n for _ in range(n)];

        2)要将offset作为最外层的循环遍历,因为每完成一层外圈循环,偏移量就必须+1;

        3)要保持遍历规则的统一,最后只需要判断n的奇偶性即可,奇数只需要直接为中心点进行赋值即可。

芯片缺陷检测全流程:从光学成像到AI自动判别的实战路线 在半导体制造中,良率是衡量产线效率的核心指标,而缺陷检测则是守住良率的关键防线。传统人工显微镜目检已难以应对微米级乃至纳米级缺陷的挑战,工业界正加速转向机器视觉与深度学习相结合的技术方案。其核心原理在于:先通过明场、暗场或DIC等光学成像获取高对比度图像,再借助传统图像处理算法快速提取候选缺陷区域,最后利用CNN等深度学习模型对缺陷进行精准分类与判定。这一技术路线不仅大幅提升检测效率与准确性,还能有效降低漏检和误报,广泛应用于晶圆制造、封装测试等环节。本文从成像选型、算法分工、数据标注到模型部署,系统梳理了 阅读详情

相关推荐

Synopsys SpyGlass 进行 RTL 功耗估计

通过上述脚本,您可以使用 Synopsys SpyGlass 对纯 RTL 代码和带有 FSDB 波形的 RTL 代码进行功耗估计,并支持将 SDC 文件转换为 SGDC 文件。

yumingqinglong的博客 2186

代码随想录算法训练营Day2(LeetCode209长度最小的子数组;LeetCode59螺旋矩阵II;卡码:区间和;卡码:开发商购买土地)

想用双指针的解法,但是思路是从全部包含逐渐递减,这样不能得到最短的数组。接下来看了双指针解法的示意图,但是实现只是用了一个循环,实现起来复杂无比,难以实现,没有考虑到窗口收缩可能不止一次。以前看到此类题目觉得很麻烦,认为是不是会有快速解答,稍微看了下题解说就是直接写,就写出来了。我这里用的是左闭右开,严格遵守就不难。,可以重载为bool运算符,因此如果有输入就可以判断为。类似,需要注意实现细节,实现的时候老是出现小错误。的返回值是cin本身的引用,比如该式等于。的情况,但是推导后发现没有影响。

weixin_51001256的博客 1543

硬件电路(22)-TTL和232切换电路

工作中会遇到TTL和232电平的通信的状态,为了实现一种便捷的切换方式,参考了一些文章,提供一种电路方便大家使用。

剑藏锋的博客 1864

代码随想录算法训练营Day2 | Leetcode 209.长度最小的子数组、59.螺旋矩阵II,区间和、开发商购买土地(补充题)

在一个城市区域内,被划分成了n * m个连续的区块,每个区块都拥有不同的权值,代表着其土地价值。目前,有两家开发公司,A 公司和 B 公司,希望购买这个城市区域的土地。为了确保公平竞争,你需要找到一种分配方式,使得 A 公司和 B 公司各自的子区域内的土地总价值之差最小。第一行输入为整数数组 Array 的长度 n,接下来 n 行,每行一个整数,表示数组的元素。随后的输入为需要计算总和的区间,直至文件结束。给定一个正整数 n,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

叽里呱啦大王的博客 1203

基于 LSTM 的船舶轨迹预测,单步预测

基于 LSTM 的船舶轨迹预测,单步预测

fyuhao的博客 1万+

UCIE Specification详解(八)

Logical Physical Layer(逻辑物理层)

Crazzy_M的博客 1608

神奇AC在哪里|代码随想录算法训练营(DAY2)|209. 长度最小的子数组、59. 螺旋矩阵 II

第一个代码出问题是在左边界收缩的时候没有想清楚思路,应该当窗口内部的值大于target时,移动左边界应该是一个while,而不是一个if判断。但是模拟的时候对于端点的判断要一致,因为是不断转圈赋值,所以统一采取左闭右开的形式,这样每次处理都是一致的边界处理标准,也能保证所有位置均赋值。修改之后的代码是一个比较标准的滑动窗口,以窗口终点作为循环结束的判断标准,滑动窗口的起点通过while多次收缩并判断。思路:滑动窗口算法,边滑动边判断。当窗口内部值大于等于目标值的时候对窗口进行压缩,以求的最小的窗口宽度。

m0_64383530的博客 396

LoRa无线通信技术介绍(六)SX127X芯片收发程序讲解

接收LORA芯片SX127X的收发程序。

DT程序员的博客 1751

代码随想录算法训练营Day2|数组Part02|209.长度最小的子数组、59.螺旋矩阵II、58.区间和(kama)

文章摘要: 本文总结了LeetCode三道典型算法题的解题思路:1) 209题使用滑动窗口法求最小长度子数组,对比了优化前后的代码实现;2) 59题通过分层处理生成螺旋矩阵,重点分析边界控制;3) 58题采用前缀和数组优化区间查询。三题均体现了算法优化思想,包括滑动窗口的效率提升、矩阵遍历的边界处理以及空间换时间的预处理策略。代码实现展示了从暴力解法到优化解法的演进过程,强调了算法思维和代码简洁性的重要性。

m0_71282417的博客 399

使用 Python 调用 GitHub REST API 爬取 GitHub 仓库信息(完整指南)

GitHub 提供了功能强大的 REST API,允许开发者通过编程方式访问 GitHub 上的仓库、用户、提交记录、PR(Pull Request)等信息。GitHub REST API 是 GitHub 官方提供的 API 接口,支持通过 HTTP 请求来操作 GitHub 上的资源。在本文中,我们将使用 Python 编写一个完整的爬虫程序,调用 GitHub 的 REST API 来爬取 GitHub 仓库的信息。目前 GitHub 使用的主要是 v3 版本的 REST API。

2201_76125261的博客 1111

ATT MTU 交换机制:提升 BLE 数据传输效率的关键

在低功耗蓝牙(BLE)技术的面试中,ATT MTU 交换机制始终是高频考点。无论是芯片厂商的固件开发岗,还是物联网设备的协议栈调试岗,面试官都爱通过这个知识点考察候选人对 BLE 数据传输底层逻辑的理解。本文将系统梳理核心考点,结合历年真题详解应答思路,轻松应对这类问题。​

byte轻骑兵的技术小窝 2411

代码随想录算法训练营56期-day 2: 209.长度最小的子数组, 59.螺旋矩阵II

【代码】代码随想录算法训练营56期-day 2: 209.长度最小的子数组, 59.螺旋矩阵II。

姜大德 273

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

代码随想录算法训练营Day2 | 977. 有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

要把数组中的元素的平方从小到大排序,而数组本身又是从小到大(更准确的说是非递减顺序),那么平方值最大的元素肯定位于两端。具体的说,C++中,一维数组、二维数组都是内存地址连续的,java中一维数组是连续的,二维不是,二维的每一行的首地址是连续的,每一行首地址用指针指向行内的元素,每一行内也是连续的。这道题暴露了我写代码的误区:总是用直接数控制循环的边界,比如nums.size()-1,nums.size()-2,这导致一旦循环的边界需要变动的时候,需要不断调整直接数,最后就是越写越乱。

apple_52404684的博客 1978

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

代码随想录算法训练营Day2 | 977.有序数组的平方 、209.长度最小的子数组、 59.螺旋矩阵II

数组:双指针、滑动窗口、模拟

宁愿过拟合不要欠拟合 2090

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

代码随想录算法训练营Day2|Leetcode977有序数组的平方、209长度最小的子数组、59螺旋矩阵II

Day2打卡!通过这三道题,不仅对每个题涉及的思路有所学习(双指针、滑动窗口、循环不变量),同时每道题代码中涉及到的小小细节也得到了学习,非常不错👍!

m0_60979177的博客 2888

代码随想录算法训练营Day 2|LeetCode977 有序数组的平方、Leetcode209 长度最小的子数组、Leetcode59 螺旋矩阵 II、Leetcode54 螺旋矩阵

像滑动窗口、螺旋矩阵这样的题方法性比较强,一开始看到题都断了思路,也是理解了为啥卡哥推荐先看视频和文章之后再做题,以后一定改T T。

qq_52807368的博客 3252

代码随想录算法训练营Day2-977.有序数组的平方、 209.长度最小的子数组、59.螺旋矩阵II

因为这道题不是第一次做到,由于数组非递减,并且数组元素有正数有负数,在平方之后,数组里的负数平方可能会比数组中一些正数的平方还大,要求是对平方后的数组排序,因此整个数组其实中间的数平方后反而会更小,知道这个规律以后,看到提示说用双指针,所以直接定义一个left,一个right指针,只要考虑两个指针的一些移动就可以。首先其实可以找规律,这个循环的方式是→↓←↑,如果n是偶数,循环n/2次结束,如果是奇数,循环完n/2次,还有一个中间的数需要填充,那么就可以直接把循环→↓←↑写好,然后迭代循环就好。

zjububbleYu的博客 917

代码随想录算法训练营day2| 209.长度最小的子数组, 59.螺旋矩阵II,区间和,开发商购买土地

文章讲解:https://programmercarl.com/0209.%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84.html。文章链接:https://programmercarl.com/%E6%95%B0%E7%BB%84%E6%80%BB%E7%BB%93%E7%AF%87.html。这是一种防御性编程的写法,确保即使没有找到合适的子数组,也能返回一个合理的值(0),而不是保留初始的极大值。

weixin_46053950的博客 1002

代码随想录算法训练营day2| 977.有序数组的平方 209.长度最小的子数组 59.螺旋矩阵II

是对第一天双指针写法还有区间定义的一些进一步练习。总体来说难度还是有一些的。加之有不少细节的地方需要处理。

qq_62455003的博客 1417

Carl代码随想录算法训练营-Day 2- 209.长度最小的子数组、59.螺旋矩阵II

以上就是代码随想录算法训练营第二天的任务了。不得不说,以前还不信编码只是程序员很小的一部分工作,更多的是写文档,现在见识到了。如果说写代码花了一小时,那么写一篇博客就要花三小时。但是坚持写博客是有好处的,在写博客的过程中不仅分享了思路,更能帮助咱们缕清算法思维。永远不要去觉得博客没人看就没必要写,因为只要你写了,那么你就没必要再去思考写这篇博客到底有没有必要了。

BuleFACE_Zhang的博客 465

代码随想录算法训练营59期day2-数组part2-209长度最小的子数组、59.螺旋矩阵II

题目:给定一个含有n个正整数的数组和一个正整数target找出该数组中满足其总和大于等于target的长度最小的,并返回其长度如果不存在符合条件的子数组,返回0。没有思路......看视频讲解了for循环中的i代表起始位置还是终止位置?答:终止!假设代表起始位置,终止从头到尾遍历,和暴力解法就没有区别了!i代表终止位置,因此重点在于如何移动起始位置!(还是看笔记里的图好理解)

zxwwency的博客 380

代码随想录算法训练营Day2——数组篇|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵 II

leetcode题目:有序数组的平方、长度最小的子数组、螺旋数组II

weixin_44837088的博客 1492

代码随想录|算法训练营Day2|209.长度最小的子数组 ,59.螺旋矩阵II ,58.区间和, 44.开发商购买土地

1)自己做代码实现时,需要先看一下代码(不管是暴力解法还是滑动窗口的双指针解法),才能自己写出来,尤其注意result的处理部分。2)滑动窗口代码实现时,有一次提交错误,是因为 return result == INT32_MAX?0 : result;这个result写成了subLen,注意最后一定返回的是比较结果。3)题目学习 + 理解 + 完成代码 + 完成日志时间:16:32—19:09。题5. LeetCode 59 螺旋矩阵II(中等)螺旋矩阵II螺旋矩阵II。

weixin_43978140的博客 989

代码随想录算法训练营day2|977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II

Introsort算法在排序的过程中,首先使用快速排序来快速地进行划分,当快速排序的递归深度超过一定限制时,为了避免快速排序的最坏情况时间复杂度O(n^2)的发生,转而使用插入排序,这样可以保证时间复杂度不会超过O(nlogn)。最直观的方法就是遍历数组并平方,然后对新数组排序,排序如果使用冒泡的话,输入规模最大1e4,在O(n^2)下就是1e8,估计会超时的,试了一下确实超时了。数组最大的数满足max{左端,右端},使用双指针,i指向左起始位置,j指向右起始位置。虽然我觉得跟毛毛虫一样。

2302_79277225的博客 1116

【Day2 数组】977有序数组的平方,209长度最小的子数组,59螺旋矩阵II 思路和易错点归纳 | 代码随想录算法训练营

做题建议:先独立做题,然后看视频讲解,然后看文章讲解,然后在重新做一遍题,把题目AC,最后整理成今日当天的博客。

学习,学无止境 1785

代码随想录算法训练营 day 2 | 209.长度最小的子数组,59.螺旋矩阵II,区间和,开发商购买土地

在看到这些题目时,我有思路,但是并不清晰,或者有关于边界条件的设置总是不够严谨,在看了carl哥的文章与视频后,思路清晰,能够跟着carl哥完成代码的编写,但是有些地方还是不能够准确无误的写下来,因此还需要多学多练多理解。当sum>=target时,首先记录累加和为sum的子数组长度,然后sum - =num [i],i 向数组下一位移动,即i=i+1。(2)并在该for循环中,从初始位置开始,先对num[j]依次相加,用sum记录累加和,直至sum>=target值。螺旋矩阵最主要的是边界条件的设置。

m0_63601971的博客 744
上一篇: 代码随想录算法训练营Day 1 | 704. 二分查找、27. 移除元素
下一篇: 代码随想录Day 2 补充【前缀和】+【数组篇总结】 | 58.区间和、44.开发商购买土地
Accept17
博客等级 码龄4年 479粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值