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

本文主要是介绍代码随想录算法训练营第二天| 977. 有序数组的平方、59.螺旋矩阵II。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

977.有序数组的平方

文档讲解:代码随想录

视频讲解:双指针法经典题目 | LeetCode:977.有序数组的平方_哔哩哔哩_bilibili

1.最先是对题目有点看不懂,为啥会强调非递减,元素平方后负数会变为正数,原有的非递减顺序会改变。最直接想到的是直接数组每个元素求平方然后对数组排序。

2.非递减这个条件利用的好,较大的数位于数组两端,这就为用双指针解法创造了条件,这个题目没有要求数组原地操作,所以定义left,right指针指向原数组,k指针指向函数返回的新数组,依次比较left,right指向元素平方和的大小,较大的值赋值给k指针指向的位置,较大的指对应的指针移动(向右或向左),k指针后移,知道left>right结束。

3. 第一次用暴力解法做,在排序哪里用了冒泡排序,但内层循环本来是遍历的j, 结果用了外层循环的i,导致用例报错。用双指针法在循环结束条件处应该是当left<=right继续循环,因为当left=right时left或right指向的元素一直没有放到新数组中去,但最后一次需要放进去。

4.学会了要充分利用题中的条件,比如非递减用双指针就比较好。然后就是边界条件用一个特殊情况去分析是否取等号,这个题学习了近一个小时。

59.螺旋矩阵II

文档讲解: 代码随想录

视频讲解: 一入循环深似海 | LeetCode:59.螺旋矩阵II_哔哩哔哩_bilibili

1. 第一次看到这个题目,不知道这个题如何做,只知道可能要利用下标关系,没有发现这个过程有何规律。

2.首先是这个规律看得很准,就是将这个过程分解为几圈和中间位置的处理,只有n为奇数时才会有中间位置,中间位置也就是模拟过程的最后一步,转多少圈可以通过n/2取整来计算,最关键的还是要定义好循环不变量,比如用左闭右开的原则就要坚持每条边都用左闭右开的原则。每次转完一圈后就更新转圈的起始位置,横纵坐标加1就可以完成,然后在转每一个圈中,左闭右开这个边界通过引入一个offset变量控制,初始值为1, 转完一圈后offset加1。如果是奇数,最后一步还需要将中心位置赋值。

3.首先没有搞清楚循环的条件是啥,应该是转多少圈,用n/2取整获得转的圈数。然后是数组索引的部分,没有想清楚哪里用startX,startY,i,j这些变量,用startX,startY初始化i,j后需要用i,j来定位,i,j是记录着当前位置的信息,startX,startY本身只在转完一圈后再执行+1的操作。

4.体会到了用好循环不变量的重要性,整个思维过程比较严谨且可控,学习了一个小时左右,第一次真正实现了这种精确的计算机模拟算法。

这篇关于代码随想录算法训练营第二天| 977. 有序数组的平方、59.螺旋矩阵II。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1036425

相关文章

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.