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

SAP MM模块后续借记、后续贷记、贷方凭证简介 在SAP系统中,后续借记、后续贷记和贷方凭证是处理供应商发票、采购和付款过程中常见的财务交易。 阅读详情

 leetcode977题.有序数组的平方

题目链接:    977. 有序数组的平方 - 力扣(LeetCode)

解题思路: 

利用双指针法,比较左右指针对应的数的平方和,把值比较大的放在数组右边.

易错点:

while循环这里,需要 left 和right相等吗?  需要,假设不想等的话,循环到最后只剩下两个元素的时候,把最大值的平方一记录,另外一个就落下了. 

遗留疑问:

这个题目,给的参考答案里面,重新new了一个数组,直接利用原有数组,不重新new数组, 可以整出来嘛???

class Solution {

        public int[] sortedSquares(int[] nums) {

        int left = 0;

        int right = nums.length - 1;

        int[] arr = new int[nums.length];

        int index=nums.length - 1;

        while (left <= right) {

            if (nums[left] * nums[left] < nums[right] * nums[right]) {

                arr[index--] = nums[right] * nums[right];

                right--;

            } else  {

                arr[ index--]=nums[left] * nums[left];

                left++;

            }

        }

        return arr;

    }

}

leetcode  209.长度最小的子数组 

题目链接:   力扣

解题思路: 

利用滑动窗口,计算窗口下的值是否>=target.,满足>=target时,记录窗口的最小值.

一旦满足sum>= target的时候,执行减去窗口左边的值,窗口左边右移,重新记录(更新)满足条件的窗口内的连续数组的最小长度.  只要满足sum>= target,while循环可以一直执行.

窗口

 本题目没有想到的地方是: 

1. 要使用while循环.自己使用的是if循环.

 假如滑动窗口尾部的 靠右边的值比较大,头部 靠左边的值比较小, 满足sum >= target时,循环内部的内容就要执行多次.

比如这组测试用例:   target = 7, nums = [2,3,1,2,4,3]

执行到1,2,4,3的时候,窗口的右边已经到数组的右边界,可以重复的while循环,才能得到4,3这个最短的连续数组.

2. 结尾处返回二元表达式,我直接返回的是min.

class Solution  {

           public int minSubArrayLen(int target, int[] nums) {

        int sum = 0;

// 记录滑动窗口对应数组长度的最小值

        int min = Integer.MAX_VALUE;

        int left = 0;

        for (int right = 0; right < nums.length ;right++) {

            sum += nums[right];

            while (sum >= target) {

                min=Math.min(min,right-left+1  )  ;

                sum-=nums[left];

                left+=1;

            }

        }

        return min==Integer.MAX_VALUE ? 0: min;

    }

    }

leetcode 59.螺旋矩阵

题目链接:  力扣

解题思路:

  我实在想不出来需要定义这么多变量.这个题目实际也考察二维数组 

int[][] arr = new int[n][n]  的打印效果.可以尝试打印如图的数组辅助理解,什么时候该操作第一个

n,什么时候操作第二个n.

 

class Solution {

       public int[][] generateMatrix(int n) {

        int[][] arr = new int[n][n];

        // 定义填充数字

        int count = 1;

        int i = 0, j =0;

        // 定义循环圈数

        int loop = 0;

        // 每圈开始的位置

        int start = 0;

        while (loop++ < n / 2) {  // loop=1

            for (j = start; j< n - loop; j++) {

                arr[start][j] = count++;

            }

            for (i = start; i < n - loop; i++) {

                arr[i][j] = count++;

            }

            for (; j >= loop; j--) {

                arr[i][j] = count++;

            }

            for (; i >= loop; i--) {

                arr[i][j] = count++;

            }

            start++;

        }

        if (n % 2 == 1) {

            arr[start][start] = count++;

        }

        return arr;

    }

}

CAPL通过lookupSignal和DBLookup获取DBC信号的属性信息 CAPL通过lookupSignal和DBLookup获取DBC信号的属性信息以及一些相关问题 阅读详情

相关推荐

Vivado与VCS+Verdi联合仿真环境搭建全攻略

本文详细介绍了如何搭建Vivado与VCS+Verdi联合仿真环境,旨在解决Vivado Simulator在大型FPGA验证中速度慢、调试弱的问题。通过指导工具版本配对、环境变量设置、关键参数配置及Xilinx仿真库编译,帮助工程师高效整合Vivado的设计管理、VCS的高速仿真与Verdi的深度调试能力,从而显著提升验证效率。

weixin_29219189的博客 577

代码随想录算法训练营第2天|LeetCode977.有序数组的平方、LeetCode209.长度最小的子数组、LeetCode:59.螺旋矩阵II

代码随想录算法训练营第2天|LeetCode977.有序数组的平方、LeetCode209.长度最小的子数组、LeetCode:59.螺旋矩阵II

weixin_63948917的博客 3198

微信聊天记录丢失原因与恢复方案详解

SQLite数据库作为移动应用常见的本地存储方案,其加密机制和存储结构直接影响数据安全性。以微信为例,聊天记录存储在EnMicroMsg.db等SQLite文件中,采用AES加密保护。当手机清理工具误删这些文件时,会导致特定时间段记录丢失。理解数据恢复原理需要掌握文件系统删除机制和闪存特性,其中关键点包括TRIM指令的影响和数据块覆盖风险。通过专业工具如DiskDigger或iMyFone D-Back,配合ADB调试和SQLite数据重组技术,可在黄金时间窗口内恢复记录。日常维护建议结合自动化备份方案和存

weixin_32612263的博客 386

代码随想录算法训练营第2天|Python版 力扣LeetCode 977. 有序数组的平方,209. 长度最小的子数组,59. 螺旋矩阵II

初始思路:i和j双指针一前一后,只要j没到数组最后一位就不跳出循环。ij之间的数字和<target就往后加一位,>target就在前面减一位,这样可以做到在数组上滑动。但是这样需要用到sum函数,而sum是O(n)的,所以相当于还是暴力解。这样写会创造一个每个子数组都指向都一个地址的二维数组,改其中任何一个都会对其他的所有进行相同的操作。这题还是双指针(对于这题来说可能叫滑动窗口更贴切),但很容易把双指针写成暴力解。最开始先想到是否要把数组在0的位置切割分成两部分,但那样再进行排序就做不了了。

skyjwent的博客 82

告别C盘爆红!手把手教你将WSL2下的Ubuntu 22.04完整迁移到D盘(附清理指南)

本文详细指导如何将WSL2下的Ubuntu 22.04从C盘无损迁移到D盘,包括导出备份、注销原系统、导入新位置等关键步骤,并提供迁移后的优化配置、开发环境衔接及长期维护技巧,帮助用户彻底解决C盘空间不足问题。

weixin_28698059的博客 474

YOLOv11改进 | Conv篇 | AKConv轻量级架构下的高效检测(附代码 + 修改方法 + 二次创新)

本文给大家带来的改进内容是AKConv是一种创新的变核卷积,它旨在解决标准卷积操作中的固有缺陷(采样形状是固定的),AKConv的核心思想在于它为卷积核提供了任意数量的参数和任意采样形状,能够使用任意数量的参数(如1, 2, 3, 4, 5, 6, 7等)来提取特征,这在标准卷积和可变形卷积中并未实现​​。AKConv能够根据硬件环境,使卷积参数的数量呈线性增减非常适用于轻量化模型的读者)。

Snu77的博客 1万+

代码随想录算法训练营第2天|Leetcode59 螺旋矩阵II 、Leetcode 209 长度最小的子数组 、Leetcode 977有序数组的平方

使用while循环,只要sum >= target,先记录此时子数组的长度,然后sum减去左指针对应的值,左指针右移一位,继续判断sum是否大于等于target。左指针对应的值 > 右指针对应的值,左指针对应的值放入要返回的数组中,位置为 right - left, 同时左指针右移一位。左指针对应的值 <= 右指针对应的值,右指针对应的值放入要返回的数组中,位置为 right - left,同时右指针左移一位。因为给我们的整形数组是非递减的,所以每个数字平方后,得到的新数组中较大的数在数组的两边。

weixin_42888279的博客 189

RK3399快速上手 | 01- 开发环境搭建(固件烧写、编译工具链安装、kernel编译)

一、编译工具链 编译工具链使用gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu。 下载地址: https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabihf/ wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/arm-linux-gnueabi

Mculover666的博客(嵌入式) 8836

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

977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II。

cjkjj的博客 513

Qt | 开发过程中总结的经验

关于如何判断自己的Qt库是多少位,有个误区就是很多人要么看成了QtCreator的关于信息中列出的位数,要么以为自己是64位的系统就认为是64位的Qt,最终要在Qt构建套件中查看具体位数,大概从Qt5.14开始基本上很少提供32位的库,尤其是Qt6.0以后基本上默认就是只有64位的库了,这也是顺应时代潮流,毕竟不久的将来(个人预计2030年以前)基本上32位的系统占比不超过1%,放心大胆的用64位的库吧,抛弃烦人的32位以及XP系统。Qt常用类的头文件的函数看完学完使用一遍并加以融会贯通,月薪30K起步。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 492

Debezium系列之:使用指定值替代指定字段的值

Debezium系列之:使用指定值替代指定字段的值

zhengzaifeidelushang的博客 306

代码随想录算法训练营第2天 | LeetCode977.有序数组的平方、LeetCode209.长度最小的子数组、LeetCode59.螺旋矩阵II

代码随想录算法训练营第2天 | LeetCode977.有序数组的平方、LeetCode209.长度最小的子数组、LeetCode59.螺旋矩阵II

m0_61649203的博客 533

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

知识点:数组是存放在连续内存空间上的相同类型数据的集合数组下标都是从0开始的一维数组内存空间的地址是连续的那么二维数组在内存的空间地址是连续的么?Java的二维数组在内存中不是 3*4 的连续地址空间,而是四条连续的地址空间组成。

qq_44932556的博客 2228

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

注意边界条件两种写法:左闭右闭,左闭右开。

U_L_Yxan的博客 2354

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

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

5的矩阵(题中给的图),那么就是[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18],[19,20],[21,22],[23,24],[25]这样的情况去遍历。nums[行][列]中行是不断变化的所以行为i,列是不变的都是最后一列,列=4.nums[行][列]=nums[i][4]nums[行][列]中行是不断变化的所以行为i,列是不变的都是第一列,列=0.nums[行][列]=nums[i][0]nums[行][列]=nums[1][j]

MYSTICSHUN的博客 1212

代码随想录算法训练营第二天 |LeetCode977.有序数组的平方 ,LeetCode209.长度最小的子数组 ,LeetCode59.螺旋矩阵II ,总结

代码随想录算法训练营第二天|LeetCode977.有序数组的平方 ,LeetCode209.长度最小的子数组 ,LeetCode59.螺旋矩阵II ,总结

2301_79647020的博客 1446

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

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

weixin_44837088的博客 1492

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

思路:直观想法还是两层for循环,遍历所有的子数组,找到满足条件的子数组时都将其长度存入result变量,下一个找到的满足条件的子数组如果长度更短,则将更短的子数组的长度覆盖进result变量。暴力解法用两个for循环,分别指向子数组的头和尾。思路:给定的数组是按非递减顺序排列的,但是每个元素原地平方后就不一定是非递减顺序了,由y=x*x函数可知,0值处函数值最小,越往两边走,函数值越大。我们用双指针,一个指向数组的头,另一个指向数组的尾,取平方值大的放入新数组的尾部(题目要求新数组也是非递减顺序排列)。

S1mpleboz的博客 1443

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

今天的内容依旧为对数组进行操作。

cattte的博客 1325

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

数组:数组是存放在连续内存空间上的相同类型数据的集合,最基础的数据结构注意要点数组下标都是从0开始的数组内存空间的地址是连续的数组的元素是不能删的,只能覆盖(固定的一段内存空间)

Mwicogito的博客 1251

代码随想录训练营第二天|LetCode977 .有序数组平方、LeetCode 209 长度最小的子数组,59.螺旋矩阵

首先对于一个矩阵定义一个上下左右四个变量,如何在依此进行遍历,这里需要注意左右的开闭区间,一般常见的方法有两种,左闭右开,或者左闭右闭。所以 只用一个for循环,那么这个循环的索引,一定是表示 滑动窗口的终止位置。在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。首先要思考 如果用一个for循环,那么应该表示 滑动窗口的起始位置,还是终止位置。那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。

qq_58670377的博客 1343

【代码随想录训练营第42期 Day2打卡 LeetCode 977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II】

【代码随想录训练营第42期 Day2打卡 LeetCode 977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵II】

记得要努力变强 1127

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

Leetcode刷题977,209,59

weixin_46176507的博客 734

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

​用for循环比较好想,但是用while的时候一下没有反应过来,其实我们开头就定义好了res,所以res的空间只有这么大,这个时候我们在外面定义一个count,然后循环里一直count++;滑动窗口和双指针是一回事儿吗,其实我觉得主要是解题思想的问题:对于滑动窗口,操作的范围是指针所夹的区间,而双指针则操作的是指向的两个值。因为是一圈一圈得模拟,所以要设定好每次的起始位置,循环结束直接++就能定义好下次循环的起始位置。状态:了解滑动窗口的模式,但是不知道它的代码精髓,导致代码写得乱的一。

糖炒栗子 871

代码随想录算法训练营第二天| LeetCode977. 有序数组的平方、LeetCode209. 长度最小的子数组、LeetCode59. 螺旋矩阵II

第一次做:没有考虑指针,偷懒用了Arrays.sort() 来排序。题目没有要求in-place,所以考虑新建一个数组来保存新值。还是考虑用指针来完成,原数组是非递减的数组,但平方后变为两边数值大,中间的数值最小。那么考虑新建左右两个指针,将较大数值放在新数组的最后一个元素中,依次比较并存储。需要注意i <= j 的判断标准,当i = j时,代表两个指针指向同一个元素,也是需要输出的。时间复杂度 O(n).

m0_49342683的博客 1103

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

有关于数组的学习到此为止,不得不说,我发现我此前对数组的认知还比较浅薄,通过这两天的学习,我已经了解到了很多新的解题的思路,收获颇丰。其中最重要的是,我学会了到了双指针的用法,它比两个for循环更加节省时间,也颇具巧思。希望我今后能继续坚持每天的学习。

2302_77519551的博客 1206
上一篇: 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
下一篇: 代码随想录算法训练营第3天| leetcode 203.移除链表元素 , 707.设计链表 ,206.反转链表
樊城太守
博客等级 码龄5年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值